2013-08-21 60 views
1

在某些shell脚本中,您需要确认“yes”来运行shell,一个更简单的方法是使用“yes”和pipe,就像这样:如何在python中使用os.system()来运行shell命令

yes | test.py 

然后,您可以自动运行shell脚本而不会回答“是”了。 今天,当我通过尝试使用python时:os.system(“yes | **。sh”),我得到了一个错误。

这里是我的test.py文件:

import os 
def f(): 
    cmd1 = "yes | read "   
    os.system(cmd1) 
f() 

,并在外壳键入如下命令运行:蟒蛇test.py.故障信息是: 是:标准输出:断开的管道 是:写入错误

但是如果我在shell中输入“yes | read”,它工作正常。 有谁可以告诉我为什么?

+0

不要;使用'subprocess'模块。 – geoffspear

回答

1

试试这个

import os 
def f(): 
    cmd1 = "echo 'yes' | read " 
    os.system(cmd1) 
f() 
0

您在shell中运行的子进程也得到了“管闭”信号时,yes继续尝试管道被关闭后写入到管道,但有的炮弹被配置为陷阱并忽略这个错误,所以你没有看到错误信息。无论如何,这是无害的。

虽然不清楚你希望这些代码能完成什么,在子流程中运行read毫无意义,因为执行read的子流程将立即退出。

如果您想重复打印yes,那么在Python本身就足够简单了。

while True: 
    print('yes') 

如果你想测试你自己的程序,你可以更改代码,以便启用调试标志运行时,它不需要交互式输入。无论如何,如果这是你的目标,你现在的方法就是从内到外;父进程(Python)进程将等待子进程管道运行。 (当你长大后,你会发现如何将输入作为命令行参数传递,以便你的脚本基本上不需要交互式提示。由于多种原因,这是一个更好的设计,但能够自动化测试你的代码当然是其中之一。)

相关问题