2013-01-06 29 views
2

如何在Python中运行以下代码?在python中运行进程到/ dev/null

/some/path/and/exec arg > /dev/null 

我得到这个:

call(["/some/path/and/exec","arg"]) 

如何插入exec过程的输出/dev/null,并保持我的Python程序照常打印输出?在中,不要将所有内容重定向到stdout?

+1

您可能在您的'sh'等价物中指''/ dev/null',而不是',它会重定向'stdin',而不是'stdout'。 – abarnert

回答

7

对于Python 3.3和更高版本,只需使用:

call(["/some/path/and/exec","arg"], stdout=DEVNULL, stderr=DEVNULL) 

注意,这两个重定向和stdoutstderr。如果您只想重定向stdout(因为您的sh行意味着可能),请忽略stderr=DEVNULL部分。

如果您需要与旧版本兼容,可以使用os.devnull。所以,这适用于一切从2.6(含3.3):

with open(os.devnull, 'w') as devnull: 
    call(["/some/path/and/exec","arg"], stdout=devnull, stderr=devnull) 

或者,对于2.4和更高版本(还包括3.3):

devnull = open(os.devnull, 'w') 
try: 
    call(["/some/path/and/exec","arg"], stdout=devnull, stderr=devnull) 
finally: 
    devnull.close() 

2.4之前,没有subprocess模块,所以这可以追溯到你可以合理地去。

+0

非常感谢...但如果我使用2.7解决方案,它仍然可以使用3.x? –

+0

@ user1432779:是的。我会把完整的兼容性细节英寸 – abarnert

+0

谢谢..但我认为我有一个问题..我试图写一个脚本在服务器上,将启动另一台服务器..但是,当我运行它通过外壳过程我在几秒后得到:Exception AttributeError:“'Popen'对象在<绑定方法中没有属性'_child_created''被忽略 {ans:0} –

相关问题