[問題] Popen印出訊息到stdout並存到變數

作者: clanguage (C語言)   2024-04-15 12:50:05
請問 subprocess.Popen 呼叫另一個程式的問題
需求是呼叫另一個程式將程式執行過程印出到畫面(stdout)之外
同時把執行過程存到變數裡做後續判斷
例子如下, hello.py 要求使用者輸入資料並印出,另一個程式 test.py呼叫 hello.py
想要儲存 hello.py 的執行過程,但是如果設定stdout=PIPE,執行過程就不會顯示提示
要使用者輸入資料
不知道該怎麼設定?
hello.py
if __name__=='__main__':
name = input("please enter your name : ")
print("hello, "+name)
test.py
def run_cmd(cmd):
process = subprocess.Popen(cmd, universal_newlines=True, shell=True,
stdout=PIPE, stderr=PIPE)
stdout, stderr = process.communicate()
ret = process.returncode
return ret, stdout, stderr
def main():
retval, output, stderr = run_cmd("hello.py")
print(f"\nResult:\n{output}")
sys.exit(0)
作者: DaOppaiLoli (大歐派蘿莉)   2024-04-15 12:56:00
應該是要改 stdin 把使用者輸入丟進去我看懂你的意思了,你可以在 communicate 之前呼叫process.stdout.readline() 把輸出行印出來但子程序要輸出換行才行,也可以用 .read(5) 之類的大概會像這樣import subprocess as spp = sp.Popen(["python", "a.py"], stdout=sp.PIPE)while p.poll() != 0:print(p.stdout.read(1), flush=True)res = p.communicate()print(res)
作者: lycantrope (阿寬)   2024-04-15 14:04:00
communicate就會poll了 為何還要一個for loop
作者: clanguage (C語言)   2024-04-15 19:58:00
謝謝D大有方向了

Links booklink

Contact Us: admin [ a t ] ucptt.com