gpt4 book ai didi

python - 从 Python 运行 PowerShell 脚本

转载 作者:行者123 更新时间:2023-12-01 07:31:33 30 4
gpt4 key购买 nike

我正在尝试运行 Powershell 脚本(请检查下面)首先,我的 Powershell 脚本在使用 Powershell 运行时工作正常,给出了预期结果(关闭所有打开的文件夹),但我必须从 Python 脚本调用它,因此我尝试使用 subprocess.Popen,但我遇到了错误 :“io.UnsupportedOperation:文件号”

已经尝试了几种不同的方法,但建议的解决方案不起作用。

我正在尝试调用以下 Powershell 脚本:

$shell = New-Object -ComObject Shell.Application 
$shell.Windows() | Format-Table LocationName, LocationURL
$window = $shell.Windows()
$window | ForEach-Object { $_.Quit() }

这个想法是关闭所有打开的文件夹,然后直接使用 Powershell 运行即可按预期工作。

然后我尝试从 Python 调用这个脚本:

p = subprocess.Popen(['powershell.exe', 'C:\\Users\\(correct subfolders)\\TEST.ps1'])

p = subprocess.Popen(['C:\\Windows\\System32\\WindowsPowerShell\\v1.0\\powershell.exe', 'C:\\Users\\(correct subfolders)\\TEST.ps1'])

并且它们不会返回错误,会打开一个 cmd 窗口,但没有任何反应。然后我尝试了以下方法:

p = subprocess.Popen(['powershell.exe', 'C:\\Users\\(correct subfolders)\\TEST.ps1'], stdout=sys.stdout)

但是我有以下错误(请检查下面)

File "<pyshell#15>", line 1, in <module>
p = subprocess.Popen(['powershell.exe', 'C:\\Users\\FernanP\\Desktop\\TEST.ps1'], stdout=sys.stdout)
File "C:\Users\FernanP\AppData\Local\Programs\Python\Python36-32\lib\subprocess.py", line 667, in __init__
errread, errwrite) = self._get_handles(stdin, stdout, stderr)
File "C:\Users\FernanP\AppData\Local\Programs\Python\Python36-32\lib\subprocess.py", line 922, in _get_handles
c2pwrite = msvcrt.get_osfhandle(stdout.fileno())
io.UnsupportedOperation: fileno

我在这里研究了类似的问题,人们提到了 Pillow 版本,但我目前使用的是 6.1.0,所以这应该不是问题。

因此,直接使用 Python 编写的与 powershell 脚本等效的脚本就足够了,或者是解决此问题的方法。希望我充分告知。韩元

最佳答案

在这里我创建了自己的 function 运行任何 powershell scriptits parameters

import subprocess  # IMPORT FOR SUB PROCESS . RUN METHOD

POWERSHELL_PATH = "powershell.exe" # POWERSHELL EXE PATH
ps_script_path = "C:\\PowershellScripts\\FTP_UPLOAD.PS1" # YOUR POWERSHELL FILE PATH


class Utility: # SHARED CLASS TO USE IN OUR PROJECT

@staticmethod # STATIC METHOD DEFINITION
def run_ftp_upload_powershell_script(script_path, *params): # SCRIPT PATH = POWERSHELL SCRIPT PATH, PARAM = POWERSHELL SCRIPT PARAMETERS ( IF ANY )

commandline_options = [POWERSHELL_PATH, '-ExecutionPolicy', 'Unrestricted', script_path] # ADD POWERSHELL EXE AND EXECUTION POLICY TO COMMAND VARIABLE
for param in params: # LOOP FOR EACH PARAMETER FROM ARRAY
commandline_options.append("'" + param + "'") # APPEND YOUR FOR POWERSHELL SCRIPT

process_result = subprocess.run(commandline_options, stdout = subprocess.PIPE, stderr = subprocess.PIPE, universal_newlines = True) # CALL PROCESS

print(process_result.returncode) # PRINT RETURN CODE OF PROCESS 0 = SUCCESS, NON-ZERO = FAIL
print(process_result.stdout) # PRINT STANDARD OUTPUT FROM POWERSHELL
print(process_result.stderr) # PRINT STANDARD ERROR FROM POWERSHELL ( IF ANY OTHERWISE ITS NULL|NONE )

if process_result.returncode == 0: # COMPARING RESULT
Message = "Success !"
else:
Message = "Error Occurred !"

return Message # RETURN MESSAGE

关于python - 从 Python 运行 PowerShell 脚本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57188398/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com