-1

我有一个等效的 shell 命令(如下所示),我试图在 linux 机器上使用 call 命令从 python 脚本“按原样”运行并遇到编译错误,除了调用 runt 这个命令之外,还有更好的方法吗?我哪里错了?

from subprocess import call

def main ():

#ssh -p 29418 company.com gerrit query --commit-message --files --current-patch-set status:open project:platform/vendor/company-proprietary/wlan branch:master |grep refs| awk -F ' ' {'print $2'} |tee refspecs.txt
    call (["ssh -p 29418 company.com gerrit query", "--commit-message", "--files", "--current-patch-set", "status:open project:platform/vendor/company-proprietary/wlan branch:master","|grep refs| awk -F ' ' {'print $2'} |tee refspecs.txt")]

if __name__ == '__main__':
    main()
4

4 回答 4

2

您需要拆分"ssh -p 29418 company.com gerrit query"(手动进行,而不是使用.split()等)。

现在,您的调用subprocess.call()尝试执行整个字符串,而您的 PATH 中显然没有该名称。

于 2012-12-27T21:14:36.100 回答
2

由于您正在设置一个非常严肃的管道,因此最简单的方法是使用 shell 执行命令。另外,请考虑使用check_call,以便您知道是否有问题。当然)]最后应该是])修复编译错误:

from subprocess import check_call

def main ():
    check_call("ssh -p 29418 company.com gerrit query --commit-message --files --current-patch-set status:open project:platform/vendor/company-proprietary/wlan branch:master | grep refs | awk -F ' ' {'print $2'} | tee refspecs.txt", shell=True)

if __name__ == '__main__':
    main()
于 2012-12-27T21:18:58.607 回答
1
from subprocess import check_call

with open("refspecs.txt", "wb") as file:
    check_call("ssh -p 29418 company.com "
        "gerrit query --commit-message --files --current-patch-set "
        "status:open project:platform/vendor/company-proprietary/wlan branch:master |"
        "grep refs |"
        "awk -F ' ' '{print $2}'",
               shell=True,   # need shell due to the pipes
               stdout=file)  # redirect to a file

我已经删除tee以抑制标准输出。

注意:任何部分甚至整个命令都可以在 Python 中实现。

于 2012-12-27T21:27:00.587 回答
0

您以错误的顺序使用了 ) 和 ] 来关闭通话。

call (["ssh -p 29418 company.com gerrit query", "--commit-message", "--files", "--current-patch-set", "status:open project:platform/vendor/company-proprietary/wlan branch:master","|grep refs| awk -F ' ' {'print $2'} |tee refspecs.txt"])
于 2012-12-27T21:16:30.723 回答