运行辅助python脚本时:
subprocess.Popen
,subprocess.call
甚至execfile
? (例如,与运行脚本的当前终端不同的终端)。一个例子,要运行两个子进程,首先应调用first.py
,然后再调用第二个子进程second.py
。因为两个脚本first.py
和second.py
是相互依赖的(如first.py
进入等待模式,直到second.py
运行,然后first.py
恢复,我不会我不知道如何在子流程方面使这种沟通在它们之间发挥作用。)
import subprocess
command = ["python", "first.py"]
command2 = ["python", "second.py"]
n = 5
for i in range(n):
p = subprocess.Popen(command, stdout=subprocess.PIPE, stderr=subprocess.STDOUT)
p2 = subprocess.Popen(command2, stdout=subprocess.PIPE, stderr=subprocess.STDOUT)
while True:
output = p.stdout.readline().strip()
print output
if output == 'stop':
print 'success'
p.terminate()
p2.terminate()
break
Framework(Ubuntu,python 2.7)
答案 0 :(得分:1)
如果您正在使用tmux
,则可以指定要在其中运行命令的目标:
tmux send -t foo.0 ls ENTER
所以,如果你已经创建了一个tmux会话foo.0
,你应该可以这样做:
my_command = 'ls'
tmux_cmd = ['tmux', 'send', '-t', 'foo.0', my_command]
p = subprocess.Popen(tmux_cmd)
答案 1 :(得分:1)
我想你想要像
这样的东西subprocess.call(['xterm','-e','python',script])
好老xterm
几乎没有多余的装饰;在Freedesktop系统上,可能会运行xdg-terminal
。在Debian上,尝试x-terminal-emulator
。
但是,在大多数情况下,使程序需要X11是一个错误。更好的解决方案是将输出运行到日志文件(或套接字等)的子进程运行,然后分别在这些文件上运行tail -f
(在不同的终端中,或从{{1}以外的其他服务器运行}或者输出到支持ssh
或或或...的记录器,这使得程序简单和模块化,没有“方便”依赖。
答案 2 :(得分:0)
您可以指定希望执行命令的终端窗口的tty
:
ls > /dev/ttys004
但是,我建议采用tmux方法进行更好的控制(参见我的其他答案)。