我想使用 python 查詢 git repo 的狀態。我在用:
subprocess.check_output("[[ -z $(git status -s) ]] && echo 'clean'", shell=True).strip()
這在 MacOS 上運行良好。但是,在 Ubuntu Linux 上,我收到一條錯誤訊息:
{CalledProcessError}Command '[[ -z $(git status -s) ]] && echo 'clean'' returned non-zero exit status 127.
我進入同一個檔案夾并手動運行
[[ -z $(git status -s) ]] && echo 'clean'
它作業正常。
我進一步運行了其他命令,例如
subprocess.check_output("ls", shell=True).strip()
這也很好用。
這里出了什么問題?
uj5u.com熱心網友回復:
當您設定 時shell=True,subprocess使用 執行您的命令/bin/sh。在 Ubuntu 上,/bin/sh不是 Bash,您使用的是 Bash 特定的語法 ( [[...]])。您可以明確呼叫bash:
subprocess.check_output(["/bin/bash", "-c", "[[ -z $(git status -s) ]] && echo 'clean'"]).strip()
但不清楚你為什么要在這里使用 shell 腳本:只需git status -s使用 Python 運行,然后自己處理結果:
out = subprocess.run(['git', 'status', '-s'], stdout=subprocess.PIPE)
if not out.stdout:
print("clean")
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/470951.html
