我知道我可以用以下内容写一个CSV文件:
with open('some.csv', 'w', newline='') as f:
Run Code Online (Sandbox Code Playgroud)
我如何将该输出写入STDOUT?
我想以下列方式使用子进程模块:
stdout(或者stderr,或者两者一起或分别捕获)我已经用Popen创建了进程,但是如果我使用communication(),那么一旦进程终止,数据就会立刻出现在我面前.
如果我创建一个单独的线程,做了阻塞readline()的myprocess.stdout(使用stdout = subprocess.PIPE)我不明白这种方法的任何行或者,直到进程终止.(无论我设置为bufsize)
有没有办法解决这个不可怕的问题,并且在多个平台上运行良好?
我需要推出一批具有长期运行的进程subprocess.Popen,并希望有stdout与stderr从各自动管道分离日志文件.每个进程将同时运行几分钟,并且我希望在进程运行时将每个进程写入两个日志文件(stdout和stderr).
我需要不断地调用p.communicate(),以便更新每个日志文件上的每个进程在循环,或者是有一些方法来调用原有的Popen命令,以便stdout和stderr自动传输到打开的文件句柄?
有没有办法让Python在没有包含像下面这样的函数调用的情况下使stdout静音?
原始破码:
from sys import stdout
from copy import copy
save_stdout = copy(stdout)
stdout = open('trash','w')
foo()
stdout = save_stdout
Run Code Online (Sandbox Code Playgroud)
编辑:更正了Alex Martelli的代码
import sys
save_stdout = sys.stdout
sys.stdout = open('trash', 'w')
foo()
sys.stdout = save_stdout
Run Code Online (Sandbox Code Playgroud)
这种方式有效,但似乎非常低效.有有是一个更好的办法.有任何想法吗?
我有一个网站,希望能够允许用户从网站上运行服务器上的Java文件.
我希望用户单击一个按钮,该按钮将在服务器上运行Java文件,并且Java程序打印到标准输出的任何内容都将打印在网站上供用户查看.
如何做到这一点(从PHP调用Java程序并将标准从Java文件实时提供回PHP网站)?
更新:
感谢有关如何从PHP运行Java程序的答案.但是我也希望能够,因为Java程序正在打印到stdout,它将在执行时打印出大量文本,以便能够在网页上打印出来,以便用户可以看到Java程序正在执行中.
如何做到这一点,是否需要任何额外的AJAX或JavaScript或类似的东西?
使用googletest框架时是否可以捕获stdout和stderr ?
例如,我想调用一个将错误写入控制台(stderr)的函数.现在,在测试中调用函数时,我想断言那里没有输出.
或者,也许我想测试错误行为,并希望在我(故意)产生错误时断言某个字符串被打印.
例如,在Python中,我可以执行以下操作:
realout = sys.stdout
sys.stdout = StringIO.StringIO()
some_function() # prints to stdout get captured in the StringIO object
result = sys.stdout.getvalue()
sys.stdout = realout
Run Code Online (Sandbox Code Playgroud)
你能在Go中这样做吗?
我有一些应该停止运行的脚本,但永远都是这样.
有什么办法可以用可读的方式弄清楚他们写的是什么?stdout和stderr?
例如,我试过这样做
$ tail -f /proc/(pid)/fd/1
Run Code Online (Sandbox Code Playgroud)
但这并没有真正起作用.无论如何,这是一个长镜头.
还有其他想法吗?因为看到这一点,它本身就是非常冗长和难以理解的.
注意:我只对他们的输出感兴趣,而不是其他任何东西.我有能力自己搞清楚其他事情; 这个问题只关注在启动它之后访问正在运行的进程的stdout和stderr .
如何print("Some text")在UTF-8中使用python 3(3.1)到stdout,或者如何输出原始字节?
TestText = "Test - ??????..šŠ??žŽ" # this is UTF-8
TestText2 = b"Test2 - \xc4\x81\xc4\x80\xc4\x93\xc4\x92\xc4\x8d\xc4\x8c..\xc5\xa1\xc5\xa0\xc5\xab\xc5\xaa\xc5\xbe\xc5\xbd" # just bytes
print(sys.getdefaultencoding())
print(sys.stdout.encoding)
print(TestText)
print(TestText.encode("utf8"))
print(TestText.encode("cp1252","replace"))
print(TestText2)
Run Code Online (Sandbox Code Playgroud)
输出(在CP1257和I中将字符替换为字节值[x00]):
utf-8
cp1257
Test - [xE2][xC2][xE7][C7][xE8][xC8]..[xF0][xD0][xFB][xDB][xFE][xDE]
b'Test - \xc4\x81\xc4\x80\xc4\x93\xc4\x92\xc4\x8d\xc4\x8c..\xc5\xa1\xc5\xa0\xc5\xab\xc5\xaa\xc5\xbe\xc5\xbd'
b'Test - ??????..\x9a\x8a??\x9e\x8e'
b'Test2 - \xc4\x81\xc4\x80\xc4\x93\xc4\x92\xc4\x8d\xc4\x8c..\xc5\xa1\xc5\xa0\xc5\xab\xc5\xaa\xc5\xbe\xc5\xbd'
Run Code Online (Sandbox Code Playgroud)
print太聪明了......:D使用编码文本是没有意义的print(因为它总是只显示字节的表示而不是实际字节)并且根本不可能输出字节,因为无论如何打印并始终对其进行编码sys.stdout.encoding.
例如:print(chr(255))抛出错误:
Run Code Online (Sandbox Code Playgroud)Traceback (most recent call last): File "Test.py", line 1, in <module> print(chr(255)); File "H:\Python31\lib\encodings\cp1257.py", line 19, in encode return codecs.charmap_encode(input,self.errors,encoding_table)[0] UnicodeEncodeError: 'charmap' codec can't encode …
当我运行测试时./manage.py test,无论我发送到标准输出通过print什么都不显示.当测试失败时,我会看到每个失败的测试都有一个"stdout"块,所以我猜Django会捕获它(但是当测试通过时它没有显示).
stdout ×10
python ×5
python-3.x ×2
subprocess ×2
c++ ×1
debugging ×1
django ×1
encoding ×1
go ×1
googletest ×1
java ×1
linux ×1
php ×1
popen ×1
scripting ×1
stderr ×1
testing ×1
unicode ×1
unit-testing ×1
utf-8 ×1