【发布时间】:2011-09-28 10:20:52
【问题描述】:
我正在使用 subprocess 从 /dev/random 使用 unix dd 创建一个随机文件。现在,如果我希望将 dd 的数据输出写入文件而不是标准输出。所以这是我正在使用的代码,
import subprocess
out_fd = open('test_file','w')
def os_system_dd():
global out_fd
out_fd.write("executing the time dd command\n")
cmd_list = ['time','dd','if=/dev/random', 'of=/home/anand/sys_entropy_random', 'bs=1M' ,'count=5']
a = subprocess.Popen(cmd_list,stdout=out_fd)
a.wait()
if __name__ == '__main__':
os_system_dd()
这不会将 dd 输出打印到文件中,而是将其打印到标准输出中。 这是 dd 命令的特定功能吗?还是我错过了一些关于子流程如何工作的东西?
【问题讨论】:
-
+1 用于简洁的代码并使用列表来构造参数。但是,我无法在这里重现您的问题;你的代码工作正常。如果整个代码是
subprocess.Popen(['time','dd','if=/dev/random', 'of=sys_entropy_random', 'bs=1M' ,'count=5']).communicate(),你的问题还会出现吗? -
好吧,我试过这个
codea = subprocess.Popen(['time','dd','if=/dev/random', 'of=/home/anand/sys_entropy_random' , 'bs=1M' ,'count=5'],stdout=out_fd)code仍然得到同样的错误。使用communicate() 可以解决我的问题,但我试图避免来自python 的额外显式写入。不过会尝试更新它。 -
糟糕,我误解了这个问题。已回答 - 只需重定向 stderr 而不是 stdout。
标签: python subprocess dd