【问题标题】:How to avoid using Shell=True如何避免使用 Shell=True
【发布时间】:2023-03-30 15:25:02
【问题描述】:

我的脚本不想启动。
如果我运行命令localsite = subprocess.Popen("Localsite.py"),它会返回OSError: [WinError 193] %1 is not a valid Win32 application

为了解决这个问题,我可以使用localsite = subprocess.Popen("Localsite.py", shell=True),我实际上并不完全确定它的作用。但我可以想象这会导致问题,因为该软件将在没有安装 Python 的情况下由普通用户分发和使用。

但是如何避免使用shell=True

【问题讨论】:

  • 关于shell=Truestackoverflow.com/questions/3172470/…的好答案
  • 不应该是subprocess.Popen(["python", "Localsite.py"])吗?
  • subprocess.Popen(["python", "Localsite.py"]) 似乎没有什么不同。
  • 没有,他说 Python 必须在路径中可用,这正是我遇到的问题,因为这将被分发。其他 2 个答案使用 shell=True

标签: python python-3.x subprocess


【解决方案1】:

你应该做到的

localsite = subprocess.Popen(["<Path to python exe>", "Localsite.py" ])

而不是

localsite = subprocess.Popen("Localsite.py")

您需要指定要执行的 python.exe 以及该 python.exe 的参数是什么

【讨论】:

  • 在我将其分发给没有 Python 的用户时,是否还有另一种方法可以做到这一点?我正在使用 PyInstaller 创建和执行,但我如何调用“Localsite.py”?
  • 对于这个特殊问题,您可能会发现文档很有帮助pyinstaller.readthedocs.io/en/v3.3.1/operating-mode.html
  • 我不确定你对入口点的意思是什么,我已经查看了文档。但是当它被捆绑到一个文件夹中时,我不知道如何调用 Python。我正在为我的 Python 脚本使用常规捆绑方法,以便将所有内容添加到文件夹中。但我在那里找不到任何 Python.exe 文件。
猜你喜欢
  • 2015-10-25
  • 2018-06-14
  • 1970-01-01
  • 1970-01-01
  • 2017-03-03
  • 2012-05-23
  • 2019-03-27
  • 2018-01-13
  • 2011-11-02
相关资源
最近更新 更多