我正在使用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"
答案 0 :(得分:1)
Windows进程有三个标准句柄,分别为StandardInput
,StandardOutput
和StandardError
。它们通常是控制台I / O,管道或磁盘文件的句柄。通常它们是从父进程继承的,或者隐式地或通过在父STARTUPINFO
传递给CreateProcess
的communicate
中明确设置它们。
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