[英]subprocess terminating a PowerShell Script before completion
只有在Python 3.7使用子處理方式run
, Popen
等,甚至使用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
我應該注意,我已經嘗試了多種方法來啟動具有相同結果的腳本。
您是否嘗試在不使用Shell的情況下運行子流程? 像這樣:
subprocess.run(
["powershell", "-ExecutionPolicy", "ByPass", "-File", "C:/PS/testAquire.ps1"],
shell=False,
)
另外,如果您更喜歡使用PowerShell,為什么不使用它將輸出重定向到目標文件中(簡單地在命令末尾添加重定向; ... > c:/output.file
)
感謝您查看這個。 我卸載了Python 3.7.2,然后安裝了3.6.8,它按設計工作。 我尚未確定問題是否出在3.7.2或與安裝有關。 我會調查。
再次感謝您的所有幫助和建議。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.