子进程在pycharm中运行时不起作用

问题描述 投票:0回答:2

[我尝试使用外壳命令使python脚本下载一些git数据。但是我希望git命令能够“查询”用户登录,并将状态报告给用于调用python的shell。我尝试使用管道进行此操作。

subprocess.run('git clone SERVER ./build',
               shell=True)

但是我什么也没看到,Python进程只是在等待而不要求输入。

[当我直接使用python main.py在终端中运行它确实起作用时,只是通过pycharm IDE运行时,输入和输出都被吃掉了。只是为了进一步澄清:当我通过pycharm的启动器运行它时,我确实注意到该过程“永无止境”,直到我杀死它,并提出KeyboardInterrupt。因此,它正在“某处”等待用户输入,只是pycharm控制台中未显示输入。

我应该如何做?如果我不添加,则shell=True子进程会抱怨git命令不是现有的文件/目录。

python git pycharm subprocess
2个回答
0
投票

问题是您没有将参数分成列表中的单独项目。因为您说“ shell = True”分离出参数并跳过外壳

from subprocess import Popen, PIPE, STDOUT


subprocess.Popen(["git", "clone", "SERVER", "./build"], stdout=PIPE, stdin=PIPE, stderr=STDOUT)

请查阅subprocess手册。您可以使用带有子进程的选项,以便将您正在调用的进程的stdin,stdout和stderr重定向到自己的进程。


0
投票

我建议您改用subprocess.call

并且在IDE中运行shell命令时,您可能需要指定可执行文件的完整路径。

git_exec = '/usr/local/bin/git'

returncode = subprocess.call('{0} clone SERVER ./build'.format(git_exec), 
                             shell=True)
if returncode != 0:
    # Code wasn't executed successfully
    # Do something
    pass
© www.soinside.com 2019 - 2024. All rights reserved.