如何使用python子进程正确控制命令行程序?

时间:2017-10-16 14:54:37

标签: python python-3.x subprocess os.system

我有一个外部命令行程序,我想通过python控制。使用subprocess.open时,它会在终端中连续打印第一个命令。我想一个接一个地输入一系列命令,然后在程序运行完毕后终止程序。我尝试了几种不同的方法,但似乎没有任何效果。有人能告诉我我做错了什么,还是帮我修改代码?这就是我所拥有的:

from subprocess import Popen, PIPE
program_location = /Fortran/Program/Here/Program

file_location = /Place/For/Input/File/File.EXP
command_list = [file_location, 'expedt', 'y', 'y', 'x', 'powpref', 'genles']
p = Popen(program_location, stdin=PIPE)

for i in command_list:
    ps.stdin.write(i)

2 个答案:

答案 0 :(得分:0)

使用Popen.communicate将输入行发送到流程并等待它完成。

答案 1 :(得分:0)

如果希望所有命令并行运行,可以在多处理的帮助下运行subprocess.call。

import subprocess
import multiprocessing

cmd_1 = ["timeout", "15", "ping", "google.com"]
cmd_2 = ["timeout", "15", "ping", "stackoverflow.com"]

cmds = [cmd_1, cmd_2]

for i in range(len(cmds)):
    p = multiprocessing.Process(target=subprocess.call, args=(cmds[i],))
    p.start()