รับค่าส่งคืนจากสคริปต์ python ที่ดำเนินการด้วย subprocess.Popen [ซ้ำ]
ฉันมีmain.pyที่ดำเนินการfile.pyโดยใช้subprocess.Popen:
# Execute request
url = "http://something:50001/dosomething/run"
test = ["python", "file.py", "url", url]
writer = subprocess.Popen(test, shell=False)
File.py เรียกใช้ฟังก์ชันที่ได้รับ "รหัสออก" เมื่อขอ url:
exitCode = None
answer = requests.get(url)
janswer = answer.json()
exitCode = janswer.get("exitCode")
return exitCode
ด้วยเหตุผลบางอย่างฉันต้องดำเนินการfile.pyโดยใช้subprocess.Popenเพื่อให้โค้ดบางตัวmain.pyดำเนินการในขณะที่file.pyทำสิ่งต่างๆ
สิ่งที่ฉันพยายามที่จะทำตอนนี้คือการกู้คืนexitCodeจากการfile.pymain.py
ฉันพยายามใช้stdout=subprocess.Pipeและกู้คืนรหัสทางออกด้วยการพิมพ์ แต่ด้วยเหตุผลบางประการมันไม่ได้ผล
การได้รับwriter.returncodeไม่ใช่วิธีแก้ปัญหาเพราะจะให้รหัสจากกระบวนการย่อยแก่ฉันไม่ใช่จากการส่งคืนฟังก์ชันฟังก์ชันการส่งคืนexitCode = -2กระบวนการย่อยreturncode = 0ฉันต้องการ -2 (-2 เป็นเพียงตัวอย่างexitCodeไม่เหมือนกันตลอดเวลาและขึ้นอยู่กับพารามิเตอร์บางอย่าง)
คำตอบ
นี่คือโปรแกรมสั้น ๆ sys.exit()ที่แสดงให้เห็นถึงวิธีการที่คุณจะได้รับหมายเลขจากกระบวนการย่อยทั้งผ่านทางท่อหรือ โปรดทราบว่าช่วงของค่าที่สามารถส่งคืนได้sys.exit()นั้นมี จำกัด
import sys
import subprocess
def sub():
try:
print(42)
except:
# Print something even in case of an exception
print(-1)
raise
sys.exit(43)
def main():
writer = subprocess.Popen(["python3", sys.argv[0], "sub"],
stdout = subprocess.PIPE)
for line in writer.stdout:
print(int(line))
exitcode = writer.wait()
print('exitcode', exitcode)
if len(sys.argv) > 1 and sys.argv[1] == 'sub':
sub()
else:
main()
นี้พิมพ์
42
exitcode 43