草庐IT

python,迭代 subprocess.Popen() stdout/stderr

有很多类似的帖子,但我没有找到答案。在Gnu/Linux上,使用Python和subprocess模块,我使用以下代码迭代使用子进程启动的命令的stdout/sdterr:classShell:"""runacommandanditerateoverthestdout/stderrlines"""def__init__(self):passdef__call__(self,args,cwd='./'):p=subprocess.Popen(args,cwd=cwd,stdout=subprocess.PIPE,stderr=subprocess.STDOUT,)whileTrue:li

python - 在进程中安全运行代码,在 multithreading.Process 中重定向 stdout

我正在处理来自MOOC的数据集。我有很多python3代码片段需要运行并从中获取结果。为此,我编写了一个循环遍历每个片段的python脚本。对于每个片段我:创建新的StringIO对象将sys.stdout和sys.stderr设置为我的stringIO缓冲区在threading.thread对象中执行代码片段加入话题将结果记录在stringIO缓冲区中恢复标准输出和标准错误这对于“正确”的代码工作正常,但在其他情况下会出现问题:当代码出现无限循环时,thread.join不会终止线程。该线程是一个守护线程,因此它在后台安静地运行,直到我的循环结束。当代码有一个带有print()的无限

python - Pandas to_csv(sys.stdout) 在我的环境下不起作用

我运行了以下简单脚本:importsysimportpandasaspddf=pd.DataFrame([[1,2,3],[4,5,6]])df.to_csv(sys.stdout)预期输出(作为标准输出),0,1,20,1,2,31,4,5,6但是,我在macOS10.12.6上的Python2.7.15下的程序在标准输出上没有输出。相反,它生成了一个名为的文件其中包含预期的输出。有趣的是,在相同的操作系统上,Python3.6.5可以毫无问题地将结果显示为标准输出,而virtualenvedPython3.6.5无法显示它(并生成了文件).有没有人找出造成这种结果的原因?Panda

python - 防止 IOError : [Errno 5] Input/output error when running without stdout

我有一个通过cronjob在服务器上自动运行的脚本,它导入并运行其他几个脚本。其中一些使用打印,这自然会产生IOError:[Errno5]Input/outputerror因为脚本在没有连接任何SSH/终端的情况下运行,所以没有正确的stdout设置。关于这个主题有很多问题,但我找不到任何人真正解决它,假设我不能删除打印或更改已执行的脚本。我尝试了几件事,包括:classStdOut(object):def__init__(self):passdefwrite(self,string):passsys.stdout=StdOut()sys.stderr=StdOut()和from__

python - 终止后从 tcpdump 子进程获取 stdout

我在这样的子进程中运行tcpdump:pcap_process=subprocess.Popen(['tcpdump','-s0','-w-','tcp'],stdout=subprocess.PIPE,stderr=subprocess.PIPE)-w-参数很重要:它告诉tcpdump将生成的.pcap文件打印到stdout。然后我继续使用urllib.open()访问网站。完成后,我想终止tcpdump并将它打印的任何内容放入字符串中。我尝试了以下方法:pcap_process.terminate()result=pcap_process.stdout.read()#orreadl

python - 使用带有 sys.stdout 的 Python 'with' 语句

我总是使用with语句打开和写入文件:withopen('file_path','w')ashandle:print>>handle,my_stuff但是,在一个实例中,我需要能够更加灵活,并写入sys.stdout(或其他类型的流),如果提供了而不是文件路径:所以,我的问题是:有没有办法对真实文件和sys.stdout使用with语句?请注意,我可以使用以下代码,但我认为这违背了使用with的目的:iffile_path!=None:outputHandle=open(file_path,'w')else:outputHandle=sys.stdoutwithoutputHandle

python - 如何在 python 中对 stdout 进行原子写入?

我在一些资源中读到print命令不是线程安全的,解决方法是使用sys.stdout.write命令,但仍然如此对我不起作用并且写入STDOUT不是原子的。这是一个简短的示例(称为此文件parallelExperiment.py):importosimportsysfrommultiprocessingimportPooldefoutput(msg):msg='%s%s'%(msg,os.linesep)sys.stdout.write(msg)deffunc(input):output(u'pid:%dgotinput\"%s\"'%(os.getpid(),str(input)))d

python - 如何在python3.3中将字节写入stdout

这个问题在这里已经有了答案:Howtowritebinarydatatostdoutinpython3?(4个答案)关闭10个月前。名为==a.py==的测试文件==importosif__name__=='__main__':forxinrange(0,1000):try:os.sys.stdout.buffer.write(b"hello\r\n")os.sys.stdout.buffer.flush()exceptOSError:pass单独运行的时候还可以。但在以下情况下存在问题:运行pythona.py|更多按ctrl+c退出然后我在ignored中得到异常OSError:O

python - 如何将 raw_input 重定向到 stderr 而不是 stdout?

我想将stdout重定向到一个文件。但这会影响raw_input。我需要将raw_input的输出重定向到stderr而不是stdout。我该怎么做? 最佳答案 raw_input的唯一问题是它将提示打印到标准输出。与其试图拦截它,不如自己打印提示,然后在没有提示的情况下调用raw_input,这不会向标准输出打印任何内容?defmy_input(prompt=None):ifprompt:sys.stderr.write(str(prompt))returnraw_input()如果你想用这个替换raw_input:import_

python - 是否可以在 python 中为 sys.stdout 设置别名?

考虑这个示例python代码。它从stdin读取并写入文件。importsysarg1=sys.argv[1]f=open(arg1,'w')f.write('')forlineinsys.stdin:f.write("")f.write(line)f.write("")f.write("")f.close()假设我想修改同一个程序,改为写入标准输出。然后,我必须将f.write()的每个实例替换为sys.stdout.write()。但那太乏味了。我想知道是否有办法将f指定为sys.stdout的别名,以便f.write()被处理作为sys.stdout.write()。