[英]Shell inheriting Python's Popen child process, including stdin/out/err
我有一個可執行文件,需要很多輸入。 我想調用一個Python腳本,該腳本將運行可執行文件,傳遞一些輸入,然后在shell繼承子進程的情況下正常退出,同時使用常規的stdin / stdout / stderr設置,以便它可以繼續傳遞輸入。
簡單的使用者input.sh:
#/bin/bash
echo "expected input: abc"
read in1
if [ "$in1" != "abc" ]; then
echo "wrong!"
exit 1
fi
echo "expected: def"
read in2
if [ "$in2" != "def" ]; then
echo "wrong!"
exit 1
fi
echo "SUCCESS!"
中間的python腳本:
#!/usr/bin/python
import sys
import subprocess
proc = subprocess.Popen('/Users/myuser/input.sh', shell=True, stdin=subprocess.PIPE, stdout=subprocess.PIPE)
out = proc.stdout.readline()
if "expected input: abc" in out:
proc.stdin.write("abc\n")
out = proc.stdout.readline()
if "expected input: def" in out:
print "my job is done here, you take over"
# MAGIC HERE! redirect proc streams to parent and exit gracefully
else:
print "error"
else:
print "error"
我可能想得太多了,但我不知道如何從python腳本正常退出,以確保從input.sh中的stdin / stdout / stderr替換了Python腳本。 在這種情況下,Python腳本只是一個中介,應該通過回答一些提示給他或她並在稍后階段放棄控制來使用戶的生活更輕松。
您可以使用Popen.communicate
向子進程發送數據或從子進程接收數據。 https://docs.python.org/3.6/library/subprocess.html#subprocess.Popen.communicate
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.