2017-10-16 36 views
1

我有一個外部命令行程序,我想通過python進行控制。當使用subprocess.open時,它會連續打印終端中的第一個命令。我想要一個接一個地輸入一系列命令,然後在完成運行後終止程序。我嘗試了幾種不同的方法,但似乎沒有任何工作。有人能告訴我我做錯了什麼,或者幫我修復我的代碼嗎?這是我有:如何使用python子進程正確控制命令行程序?

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) 
+0

根據您正在執行的shell,可能需要使用換行符來終止每個命令,例如, '我+'\ n''。 – cdarke

回答

0

使用Popen.communicate輸入的線路發送給該進程,並等待它完成。

+0

最初我嘗試了溝通,並且一直在終端打印出一行。 p.communicate(os.linesep.join(command_list))不起作用 – Ssrix

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() 
相關問題