Python子进程调用powershell不会在pycharm IDE中返回

时间:2014-11-12 18:39:42

标签: python powershell subprocess pydev pycharm

我正在使用pycharm IDE进行开发。当使用pycharm IDE调试以下调用powershell脚本的简单python程序时,它似乎没有返回并且它被卡在PowerShell中。但是,如果只是在commnad行(python callps.py)上运行它,它就会运行并返回。我看到有人在https://youtrack.jetbrains.com/issue/PY-12088上报告了一个问题,但它尚未得到解决且没有更新。任何人都有提示解决这个问题,谢谢。 云家伙。

Powershell脚本:samplePowerShell.ps1:

$x = 1
$y = 2
return $x, $y

python脚本:callps.py:

import subprocess
cmd = ['powershell', '-ExecutionPolicy', 'RemoteSigned', '-File', 'samplePowerShell.ps1']
returncode = subprocess.call(cmd)
print "Done"

1 个答案:

答案 0 :(得分:1)

Windows进程有三个标准句柄,分别为StandardInputStandardOutputStandardError。它们通常是控制台I / O,管道或磁盘文件的句柄。通常它们是从父进程继承的,或者隐式地或通过在父STARTUPINFO传递给CreateProcesscommunicate中明确设置它们。

PyCharm可能使用管道标准I / O执行解释器。如果是这种情况,那么PowerShell会继承这些句柄,并且可能会对输入管道进行阻塞读取。

要解决此问题,您可以将自己的管道提供给PowerShell,然后{{3}}。

import subprocess

cmd = ['powershell.exe',
       '-ExecutionPolicy', 'RemoteSigned',
       '-File', 'samplePowerShell.ps1']
p = subprocess.Popen(cmd, 
                     stdin=subprocess.PIPE, 
                     stdout=subprocess.PIPE, 
                     stderr=subprocess.PIPE)
out, err = p.communicate()
returncode = p.wait()
print returncode