簡體   English   中英

如何在 Python 的 shell 腳本中獲取設置的退出狀態

[英]How to get the exit status set in a shell script in Python

我想在從 Python 調用的 shell 腳本中設置退出狀態。

代碼如下

Python腳本

result = os.system("./compile_cmd.sh")
print result

文件compile_cmd.sh

javac @source.txt
# I do some code here to get the number of compilation errors
if [$error1 -e 0 ]
then
echo "\n********** Java compilation successful **********"
exit 0
else
echo "\n** Java compilation error in file ** File not checked in to CVS **"
exit 1
fi

我正在運行此代碼,但無論我返回什么退出狀態,我都將結果 var 設為 0(我認為無論 shell 腳本是否成功運行,它都會返回)。

如何獲取我在 Python 腳本的 shell 腳本中設置的退出狀態?

import subprocess

result = subprocess.Popen("./compile_cmd.sh")
text = result.communicate()[0]
return_code = result.returncode

取自此處: 使用 Python 子進程通信方法時如何獲取退出代碼?

要使用subprocess.run subprocess.run()推薦的Python v3.5+方法補充cptPH 的有用答案

import subprocess

# Invoke the shell script (without up-front shell involvement)
# and pass its output streams through.
# run()'s return value is an object with information about the completed process. 
completedProc = subprocess.run('./compile_cmd.sh')

# Print the exit code.
print(completedProc.returncode)
import subprocess
proc = subprocess.Popen("Main.exe",stdout=subprocess.PIPE,creationflags=subprocess.DETACHED_PROCESS)
result,err = proc.communicate()
exit_code = proc.wait()
print(exit_code)
print(result,err)

在 subprocess.Popen -> 創建標志用於在分離模式下創建進程,如果您不希望分離更多,只需刪除該部分。
subprocess.DETACHED_PROCESS -> 在 python 進程之外運行進程

使用 proc.communicate() -> 你可以得到他的輸出和來自該進程的錯誤 proc.wait() 將等待進程完成並給出程序的退出代碼。

注意: subprocess.popen() 和 proc.wait() 之間的任何命令將在等待調用時照常執行,在子進程完成之前不會進一步執行。

暫無
暫無

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

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