redirect the screen output into a file - python-3.x

I got a question about redirect the screen output into a single file. Here is my code to print the screen output:
for O,x,y,z,M,n in coordinate:
print(O,x,y,z,M,n)
And the screen output looks like:
O 0 0 0 ! 1
O 1 0 0 ! 2
O 2 0 0 ! 3
So how can I redirect all the data into a single file and in the same format, just like the screen output. Because it will be mush faster to get all the data rather than waiting for the screen output to finish.
I triedfor point in coordinate:
file.write(' '.join(str(s) for s in point)) but output file became:
O 0 0 0 ! 0O 1 0 0 ! 1O 2 0 0 ! 2O 3 0 0 ! 3O 4 0 0 ! 4O 5 0 0 ! 5O 6 0 0 ! 6O

You could simply redirect the console output to a file
$ python yourscript.py > output.txt
No code changes necessary.

The print function has a keyword-only parameter file which specifies the file object to be written to. That's the easiest way to go:
for O,x,y,z,M,n in coordinate:
print(O,x,y,z,M,n,file=output_file)
The reason your write code wasn't working is that you were not putting a newline character at the end of each entry. You could also try fixing that:
file.write(' '.join(str(s) for s in point) + '\n')

Related

Foreach loop won't run

Homework is to modify this script to take exec as an argument, but first I want to be able to run the script to try to figure out how to modify it
tcsh $ cat foreach_1
#!/bin/tcsh
# routine to zero-fill argv to 20 arguments
#
set buffer = (0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0)
set count = 1
#
if ($#argv > 20) goto toomany
#
foreach argument ($argv[*])
set buffer[$count] = $argument
# count++
end
# REPLACE command ON THE NEXT LINE WITH
# THE PROGRAM YOU WANT TO CALL.
exec command $buffer[*]
#
toomany:
echo "Too many arguments given."
echo "Usage: foreach_1 [up to 20 arguments]"
exit 1
But I get this error when trying to run it:
./foreach_1: line 5: syntax error near unexpected token `('
./foreach_1: line 5: `set buffer = (0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0)'
I don't have any extra quotes, so why is this happening?
In many shells (and I believe that tcsh is counted among the bourne compatibles), you must place the left-hand side of the expression, the =, and the right-hand side all directly adjacent to one another.
# shorten the ` = ` to `=` below:
set buffer=(0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0)
set count=1
if ($#argv > 20) goto toomany
#
foreach argument ($argv[*])
set buffer[$count] = $argument
# count++
end
# REPLACE command ON THE NEXT LINE WITH
# THE PROGRAM YOU WANT TO CALL.
exec command $buffer[*]
#
toomany:
echo "Too many arguments given."
echo "Usage: foreach_1 [up to 20 arguments]"
exit 1

Error with Qhull. How could I correct it?

Basically, I am using qhull for some simple c++ implementations
dhcp-18-189-48-131:qhull-2012.1_2$ cat sample_input.txt
3 #
4
1 0 0
0 1 0
0 0 1
0 0 0
dhcp-18-189-48-131:qhull-2012.1_2$ qhull sample_input.txt
QH7036 qhull warning: missing space after flag s(73); reserved for menu. Skipped.
However, my programmes hangs with such error.... Could anyone help? Thank you.
I resolve it by doing
$ qhull < sample_input.txt
instead...

Windows API ReadFile Drops Null Characters (Serial Port)

I am using ReadFile to read a null character '0x00', but it is not able to see it.
If I send "0x01 0x02 0x00 0x03" to my program. It will receive "0x01 0x02 0x03". I know for a fact that my sending side is sending the null character (I used a scope to see the data).
I have checked the DCB structure and have fNull set to false. (which is supposed to allow for null bytes to be received and not discarded)
This is the configuration of the DCB shown from GetCommState:
DCBlength 28
BaudRate 9600
fBinary 1
fParity 0
fOutxCtsFlow 0
fOutxDsrFlow 0
fDtrControl 0
fDsrSensitivity 0
fTXContinueOnXoff 0
fOutX 1
fInX 1
fErrorChar 0
fNull 0
fRtsControl 0
fAbortOnError 0
fDummy2 0
wReserved 0
XonLim 2048
XoffLim 512
ByteSize 7
Parity 0
StopBits 2
XonChar 0 '\0'
XoffChar 0 '\0'
ErrorChar 0 '\0'
EofChar 0 '\0'
EvtChar 0 '\0'
wReserved1 0
Am I missing something in the structure that might be blocking the null character as well? or is it possible it's a driver configuration or registry configuration that I need to change?
You have XON/XOFF flow control enabled and have specified null as the XON/XOFF characters. That is why you are not seeing null data bytes. You need to set the fOutX and fInX fields to 0 instead of 1.

How to generate plain-text source-code PDF examples that work in a document viewer?

I just found the post Adobe Forums: Simple Text String Example in specification broken., so I got interested in finding plain-text source code PDF examples.
So, through that post, I eventually found:
The webpage PDF Reference and Adobe Extensions to the PDF Specification | Adobe Developer Connection ; which contains:
The PDF Document Management – Portable Document Format – Part 1: PDF 1.7, First Edition (PDF32000_2008.pdf)
The PDF 1.7 spec has on page 699 appendix "_Annex H (informative) Example PDF files"; and from there, I wanted to try "H.3 Simple Text String Example" (the "classic Hello World").
So I tried to save this as hello.pdf (_except note when you copy from the PDF32000_2008.pdf, you may get "%PDF-1. 4" - that is, a space inserted after 1., which must be removed_) :
%PDF-1.4
1 0 obj
<< /Type /Catalog
/Outlines 2 0 R
/Pages 3 0 R
>>
endobj
2 0 obj
<< /Type /Outlines
/Count 0
>>
endobj
3 0 obj
<< /Type /Pages
/Kids [ 4 0 R ]
/Count 1
>>
endobj
4 0 obj
<< /Type /Page
/Parent 3 0 R
/MediaBox [ 0 0 612 792 ]
/Contents 5 0 R
/Resources << /ProcSet 6 0 R
/Font << /F1 7 0 R >>
>>
>>
endobj
5 0 obj
<< /Length 73 >>
stream
BT
/F1 24 Tf
100 100 Td
( Hello World ) Tj
ET
endstream
endobj
... and I'm trying to open it:
evince hello.pdf
... however, evince cannot open it: "Unable to open document / PDF document is damaged"; and also:
Error: PDF file is damaged - attempting to reconstruct xref table...
Error: Couldn't find trailer dictionary
Error: Couldn't read xref table
I also check with qpdf:
$ qpdf --check hello.pdf
WARNING: hello.pdf: file is damaged
WARNING: hello.pdf: can't find startxref
WARNING: hello.pdf: Attempting to reconstruct cross-reference table
hello.pdf: unable to find trailer dictionary while recovering damaged file
Where am I going wrong with this?
Many thanks in advance for any answers,
Cheers!
You should append a (syntactically correct) xref and trailer section to the end of the file. That means: each object in your PDF needs one line in the xref table, even if the byte offset isn't correctly stated. Then Ghostscript, pdftk or qpdf can re-establish a correct xref and render the file:
[...]
endobj
xref
0 8
0000000000 65535 f
0000000010 00000 n
0000000020 00000 n
0000000030 00000 n
0000000040 00000 n
0000000050 00000 n
0000000060 00000 n
0000000070 00000 n
trailer
<</Size 8/Root 1 0 R>>
startxref
555
%%EOF
Ah damn it - I had copied just a part of the code; the OP code is the one on pg 701 - then there is a footer which confused me; otherwise the code continues on pg 702 :/
(EDIT: also see Introduction to PDF - GNUpdf (archive) for a similar, more detailed example)
So here is the complete code:
%PDF-1.4
1 0 obj
<< /Type /Catalog
/Outlines 2 0 R
/Pages 3 0 R
>>
endobj
2 0 obj
<< /Type /Outlines
/Count 0
>>
endobj
3 0 obj
<< /Type /Pages
/Kids [ 4 0 R ]
/Count 1
>>
endobj
4 0 obj
<< /Type /Page
/Parent 3 0 R
/MediaBox [ 0 0 612 792 ]
/Contents 5 0 R
/Resources << /ProcSet 6 0 R
/Font << /F1 7 0 R >>
>>
>>
endobj
5 0 obj
<< /Length 73 >>
stream
BT
/F1 24 Tf
100 100 Td
( Hello World ) Tj
ET
endstream
endobj
6 0 obj
[ /PDF /Text ]
endobj
7 0 obj
<< /Type /Font
/Subtype /Type1
/Name /F1
/BaseFont /Helvetica
/Encoding /MacRomanEncoding
>>
endobj
xref
0 8
0000000000 65535 f
0000000009 00000 n
0000000074 00000 n
0000000120 00000 n
0000000179 00000 n
0000000364 00000 n
0000000466 00000 n
0000000496 00000 n
trailer
<< /Size 8
/Root 1 0 R
>>
startxref
625
%%EOF
Indeed, as the error messages were saying, xref section was missing!
However, this is still not the end - while this document will open in evince, evince will still complain:
$ evince hello.pdf
Error: PDF file is damaged - attempting to reconstruct xref table...
... and so will qpdf:
$ qpdf --check hello.pdf
WARNING: hello.pdf: file is damaged
WARNING: hello.pdf (file position 625): xref not found
WARNING: hello.pdf: Attempting to reconstruct cross-reference table
checking hello.pdf
PDF Version: 1.4
File is not encrypted
File is not linearized
WARNING: hello.pdf (object 5 0, file position 436): attempting to recover stream length
So to actually get a proper example, as the Adobe Forums: Simple Text String Example in specification broken. points out, xref table needs to be reconstructed (have correct byte offsets).
And in order to do this, we can use pdftk to "Repair a PDF's Corrupted XREF Table and Stream Lengths (If Possible)":
$ pdftk hello.pdf output hello_repair.pdf
... and now hello_repair.pdf opens in evince without a problem - and qpdf reports:
$ qpdf --check hello_repair.pdf
checking hello_repair.pdf
PDF Version: 1.4
File is not encrypted
File is not linearized
No errors found
Well, hope this helps someone,
Cheers!

posting data with curl_exec on background returns 0's

I'm executing a curl command from php in background,
that uses curl_exec to retrieve some data and something is wrong...
when i try to pass post data to curl_exec script:
exec('curl --data "'.$post_string.'" '.$post_url);
all fine, i get a 200 response, script finishes successfully
same command, but with "> /dev/null &":
exec('curl --data "'.$post_string.'" '.$post_url.' > /dev/null &');
returns (taken from curl_getinfo from $post_url)
http://somurlhere.com
0
0
0
-1
0
0
0.552842
0.51867
0.552705
0.552725
0
0
0
0
0
0
0
0
How is that possible?
I'm doing something wrong?
I know that the script doesn't die, since it logs to a txt file at the end of execution...
Any ideas?
as i thought, just a stupid mistake, i was removing some data after executing the command, and since it's in background, i remove it before the second script gets a chance to access it, that was the problem =]

Resources