簡體   English   中英

從python腳本運行程序時了解python中的子進程模塊

[英]Understanding subprocess module in python when running program from python script

通常,我通常在OpenSuse linux終端中通過輸入./run file_name來運行程序。 這將帶來一系列選項,我可以通過鍵入數字0-9並按鍵盤上的return來選擇。 現在,我想從python腳本自動執行此操作。 我下面的示例無法正常工作,但是我無法理解失敗的地方以及調試方法:

import subprocess
p = subprocess.Popen(["/path/to/program/run", file_name], stdin = subprocess.PIPE,stdout=subprocess.PIPE,shell=False)
print "Hello"
out, err = p.communicate(input='0\r\n')
print out
print err
for line in p.stdout.readlines():
    print line

這個程序的輸出是

>> Hello
>>

即然后它似乎凍結了(我不知道實際發生了什么!)我本來希望看到我在運行./run file_name並單擊0然后直接在終端中return時看到的內容,但是我向您保證這不是案子。 我該如何調試我的代碼?

編輯1:如評論中所建議

import subprocess

fileName = 'test_profile'
p = subprocess.Popen(["/path/to/program/run", fileName], stdin = subprocess.PIPE,stdout=subprocess.PIPE,shell=False)
print "Hello"

for line in iter(p.stdout.readline,""):
    print line

確實會返回我程序的標准輸出!

communicate等待程序完成。 例如:

import subprocess
p = subprocess.Popen(["cut", "-c2"], stdin=subprocess.PIPE, stdout=subprocess.PIPE,shell=False)
out, err = p.communicate(input='abc')
print("Result: '{}'".format(out.strip()))

# Result: 'b'

聽起來您的腳本更具交互性,在這種情況下,您可能應該嘗試使用pexpect

import pexpect

child = pexpect.spawn('cut -c2')
child.sendline('abc')
child.readline() # repeat what was typed
print(child.readline()) # prints 'b'

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM