【发布时间】:2017-09-08 18:55:20
【问题描述】:
我有一个 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) 文件 "C:\Python27\lib\subprocess.py", 第 703 行,在 init 中 errread, errwrite), to_close = self._get_handles(stdin, stdout, stderr) 文件“C:\Python27\lib\subprocess.py”,第 850 行,在 _get_handles c2pwrite = msvcrt.get_osfhandle(stdout.fileno()) UnsupportedOperation: fileno
更新
删除,stdout=sys.stdout1 摆脱了以前的错误,现在我明白了
test.ps1 无法加载,因为运行 \r\nscripts 被禁用 这个系统。
我已尝试将命令切换到".\\test.ps1 Set-ExecutionPolicy -ExecutionPolicy unrestricted",但问题仍然存在。
另外,是否可以将命令构建为字符串并在构建时一一执行,而不是创建一个 .ps1 文件?非常感谢任何能解决这个问题的人!
【问题讨论】:
-
你不需要
stdout=sys.stdout这是默认的。您是否尝试过仅使用os.system()?或subprocess.check_call()? -
啊删除
stdout=sys.stdout停止了我在python shell 中看到的错误,我确实简要地看到了一个看起来像是powershell 窗口弹出的错误,但我无法理解它是什么。关于如何阻止它关闭我可以添加到 ps1 文件的任何想法?抱歉,这里绝对是一个使用 powershell 的菜鸟 -
不要从你的 IDE 运行它,从标准控制台运行它
标签: python powershell