我试图在我的python代码中删除os.system,大部分都已完成,但我有一行我似乎无法转换。
os.system('/bin/sh -i -c "/bin/runner catch exts"')
到目前为止,事情已经尝试过:
p = subprocess.Popen(['/bin/sh', '-i', '-c', '/bin/runner catch exts'])
返回:
/bin/sh: 1: Cannot set tty process group (No such process)
编辑:
我没有运行我的自定义跑步者,而是用“ls”尝试了这个,我仍然得到同样的错误。
os.system('/bin/sh -i -c "ls"') # works fine
现在尝试转换 -
p = subprocess.Popen(['/bin/sh', '-i', '-c', 'ls']) # Doesn't work
返回:
/bin/sh: 1: Cannot set tty process group (No such process)
尝试(这应该不起作用,但是用户在评论中建议):
p = subprocess.Popen('/bin/sh -i -c "ls"')
返回:
OSError: [Errno 2] No such file or directory
答案 0 :(得分:0)
Popen
无法使用交互式shell。 subprocess
模块旨在让您完全控制子进程的stdin和stdout,以便与之交谈。
pty
模块,也可以使用os.system()
答案 1 :(得分:0)
您应该使用subprocess.call()而不是subprocess.Popen()。 Popen使你的子进程'stdin成为一个管道,但是sh -i想要将它的stdin用作tty。