我有一个python脚本,可以根据通过休息获得的输入来构建命令。 打印出来并复制并粘贴到PowerShell中时,这些命令可以正常工作。 我的问题是如何让它实际执行命令?
到目前为止,我已经尝试将命令写入同一目录中的文件并运行如下:
import subprocess, sys
p = subprocess.Popen(["powershell.exe", "test.ps1"],stdout=sys.stdout)
p.communicate()
但是我收到了一个错误:
Traceback(最近一次调用最后一次):文件 " C:/Users/pschaefer/src/python/executePowerShell.py" ;,第2行,在 p = subprocess.Popen([" powershell.exe"," test.ps1"],stdout = sys.stdout)File" C:\ Python27 \ lib \ subprocess。 PY&#34 ;, 第703行,在 init 中 errread,errwrite),to_close = self._get_handles(stdin,stdout,stderr)File" C:\ Python27 \ lib \ subprocess.py",850行in _get_handles c2pwrite = msvcrt.get_osfhandle(stdout.fileno())UnsupportedOperation:fileno
更新
删除,stdout=sys.stdout1
摆脱了之前的错误,现在我看到了
无法加载test.ps1,因为禁用了运行\ r \ nscripts 这个系统。
我尝试将命令切换到".\\test.ps1 Set-ExecutionPolicy -ExecutionPolicy unrestricted"
但仍有问题。
此外,是否可以将命令构建为字符串并逐个执行它们而不是创建.ps1文件?对任何可以解决这个问题的人都有很大的荣誉!
答案 0 :(得分:2)
您运行脚本的计算机是否已启用以运行PowerShell脚本?您可以通过Set-ExecutionPolicy cmdlet进行设置,也可以传递-ExecutionPolicy Bypass
参数以较低的权限运行脚本。
答案 1 :(得分:1)
不支持从IDE运行此类脚本,因为IDE会将stdout
重定向到自己的流,这在大多数情况下都不会正确支持fileno
。
但是,在真实的系统shell中运行这些命令是有效的。
适用于shell和amp;的解决方法IDE将删除stdout=sys.stdout
,但您无法获取错误消息或检索输出,甚至更好:使用Popen
功能重定向输出/错误流:
import subprocess, sys
p = subprocess.Popen(["powershell.exe", "test.ps1"],stdout=subprocess.PIPE,stderr=subprocess.PIPE)
out,err = p.communicate()
print(out,err)
在我的机器上,由于test.ps1
不存在,我收到一条明确的PowerShell错误消息。
编辑:我的回答没有回答你的问题编辑,现在显示实际的错误信息。此Q& A可以帮助您:PowerShell says "execution of scripts is disabled on this system."