用python编写命令并在powershell中执行

时间:2017-04-12 20:19:25

标签: python powershell

我有一个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文件?对任何可以解决这个问题的人都有很大的荣誉!

2 个答案:

答案 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."