子流程在完成之前终止PowerShell脚本

时间:2018-12-29 21:52:20

标签: python python-3.x powershell

仅在Python 3.7中使用子处理方法runPopen等,甚至使用os.system(),我正在调用的PowerShell脚本似乎在完成之前就终止了。我有一个更加复杂的脚本,但是我已经能够简化Python脚本和PowerShell脚本来解决这个问题。 PowerShell脚本也显示在下面。

这是Python代码:

'''子进程截断输出'''

import subprocess       # subprocess library

p = subprocess.run("powershell -ExecutionPolicy ByPass -File C:/PS/testAquire.ps1",
                   shell=True, check=True, stdout=subprocess.PIPE)
print("stdout:", p.stdout)
print("stderr:", p.stderr)

这是Python脚本输出,不显示任何错误:

stdout: b''
stderr: None

这是使用上述Python脚本执行后的result.txt文件的整个内容。

Directory: C:\windows\system32\drivers


Mode                LastWriteTime         Length Name

----                -------------         ------ ----                                                                   d-----        4/12/2018   5:15 AM                en-US
d-----        4/12/2018   5:15 AM                UMDF

-a----        1/19/2017   5:43 AM           3301 1028_Dell_INS_24-7459.mrk
-a----        4/11/2018   7:34 PM          29696 afunix.sys
-a----        4/11/2018   7:34 PM        3440660 gm.dls
-a----        4/11/2018   7:34 PM            646 gmreadme.txt
-a----        9/12/2015   4:59 AM          18720 IntelMEFWVer.dll

这是PowerShell脚本

<#
.synopsis
Sample script to demonstrate unusual results when called from Python 3.7
#>

Get-ChildItem c:/windows/system32/drivers/ |  Format-Table | Out-File c:/PS/result.txt -Encoding ascii

这是从PowerShell命令运行或使用Python 2.7启动PowerShell脚本时脚本的正常输出。

Directory: C:\windows\system32\drivers


Mode                LastWriteTime         Length Name

----                -------------         ------ ----                                                                         d-----        4/11/2018   7:38 PM                DriverData
d-----        8/15/2018   5:33 PM                en-US
d-----        5/30/2018   9:31 AM                etc
d-----       11/14/2018   5:32 PM                UMDF
d-----       12/10/2018   5:50 PM                wd

-a----        1/19/2017   5:43 AM           3301 1028_Dell_INS_24-7459.mrk

-a----        4/11/2018   7:33 PM         237568 1394ohci.sys
-a----        4/11/2018   7:33 PM         107416 3ware.sys
-a----        4/11/2018   7:33 PM         654232 acpi.sys
-a----        4/11/2018   7:33 PM          20480 AcpiDev.sys
-a----        4/11/2018   7:33 PM         127904 acpiex.sys
-a----        4/11/2018   7:33 PM          12800 acpipagr.sys
-a----        4/11/2018   7:33 PM          14848 acpipmi.sys
-a----        4/11/2018   7:33 PM          13824 acpitime.sys
-a----        4/11/2018   7:33 PM        1135520 adp80xx.sys
-a----        4/11/2018   7:34 PM         626592 afd.sys
-a----        4/11/2018   7:34 PM          39424 afunix.sys
-a----        4/11/2018   7:34 PM         108032 agilevpn.sys
-a----        4/11/2018   7:34 PM         254464 ahcache.sys
-a----        9/24/2015   5:17 AM         109200 aksdf.sys
-a----        9/24/2015   5:17 AM         205528 aksfridge.sys
-a----        4/11/2018   7:33 PM         181760 amdk8.sys

... ... I reduced the output for brevity ...

-a----        4/11/2018   7:34 PM          33184 WppRecorder.sys
-a----        4/11/2018   7:34 PM          23040 ws2ifsl.sys
-a----        4/11/2018   7:33 PM          23040 WSDPrint.sys
-a----        4/11/2018   7:33 PM          25088 WSDScan.sys
-a----        4/11/2018   7:34 PM         125440 WUDFPf.sys
-a----        4/11/2018   7:34 PM         264192 WUDFRd.sys
-a----        6/15/2018  12:44 AM         295424 xboxgip.sys
-a----        4/11/2018   7:33 PM          46592 xinputhid.sys

我应该注意,我已经尝试了数十种方法来以相同的结果启动脚本。

2 个答案:

答案 0 :(得分:0)

您是否尝试在不使用Shell的情况下运行子进程?像这样:

subprocess.run(
  ["powershell", "-ExecutionPolicy", "ByPass", "-File", "C:/PS/testAquire.ps1"],
  shell=False,
)

或者,如果您更喜欢使用PowerShell,为什么不使用它将输出重定向到目标文件(只需在命令末尾添加重定向即可; ... > c:/output.file

答案 1 :(得分:0)

感谢您对此进行调查。我卸载了Python 3.7.2,然后安装了3.6.8,它按设计工作。我尚未确定问题是否出在3.7.2或与安装有关。我会调查的。

再次感谢您的所有帮助和建议。