Python Popen 在标准输入上发送到进程,在标准输出上接收
Posted
技术标签:
【中文标题】Python Popen 在标准输入上发送到进程,在标准输出上接收【英文标题】:Python Popen sending to process on stdin, receiving on stdout 【发布时间】:2013-04-03 10:41:17 【问题描述】:我将命令行上的可执行文件传递给我的 python 脚本。我做了一些计算,然后我想将这些计算的结果在 STDIN 上发送到可执行文件。完成后,我想从 STDOUT 中获取可执行文件的结果。
ciphertext = str(hex(C1))
exe = popen([sys.argv[1]], stdout=PIPE, stdin=PIPE)
result = exe.communicate(input=ciphertext)[0]
print(result)
当我打印result
时,我什么也得不到,没有得到空行。我确信可执行文件可以处理数据,因为我在命令行上使用“>”重复了相同的操作,结果与先前计算的结果相同。
【问题讨论】:
您确定您已经测试过即使在输入末尾没有换行符的情况下可执行文件也能正常工作? (“echo”会添加一个换行符,“echo -n”不会。) @svk 是的,也适用于换行符 【参考方案1】:一个工作示例
#!/usr/bin/env python
import subprocess
text = 'hello'
proc = subprocess.Popen(
'md5sum',stdout=subprocess.PIPE,
stdin=subprocess.PIPE)
proc.stdin.write(text)
proc.stdin.close()
result = proc.stdout.read()
print result
proc.wait()
要获得与“execuable < params.file > output.file
”相同的内容,请执行以下操作:
#!/usr/bin/env python
import subprocess
infile,outfile = 'params.file','output.file'
with open(outfile,'w') as ouf:
with open(infile,'r') as inf:
proc = subprocess.Popen(
'md5sum',stdout=ouf,stdin=inf)
proc.wait()
【讨论】:
还是一样的结果,空行。 Popen 实际上与命令行上的“ output.file以上是关于Python Popen 在标准输入上发送到进程,在标准输出上接收的主要内容,如果未能解决你的问题,请参考以下文章
在 Windows 上的 Python Popen 子进程中暂停 FFmpeg 编码