【问题标题】:How to Run a Program in Python.如何在 Python 中运行程序。
【发布时间】:2012-09-14 08:12:55
【问题描述】:

我正在尝试制作一个可以从我的计算机运行 .exe 文件的脚本。我想我使用了错误的命令。我尝试了所有其他命令,例如 import os, os.startfile,但它们不起作用。

这是我的代码:

loop=0
while loop==0:
    answer=raw_input("coded by: Narralol\n\n"
    "Pick a task:\n"
    "1) Start Minecraft.exe\n"
    "2) Start Minecraft_Server.jar\n"
    "3) Backup your server\n"
    "4) Copy the backup to your desktop\n"
    "5) Exit\n")
    if answer==1:
        execfile('D:\Games\Minecraft\Minecraft.exe')
    elif answer==2:
        execfile('D:\Games\Minecraft\Minecraft_server.jar')
    elif answer==5:
        loop=1

【问题讨论】:

标签: python py2exe


【解决方案1】:

使用subprocess module 运行外部命令:

import subprocess

    subprocess.call('D:\Games\Minecraft\Minecraft.exe')

【讨论】:

  • @JoranBeasley:甚至os.system 文档也指出subprocess 是更可取的方法;一方面,默认的参数处理方法避免了 shell 注入漏洞。
  • 是的,我知道...但是他正在控制输入并且不需要输出...所以在这种情况下,我会说 os.system 可以正常工作...但是 subprocess 肯定是“正确”的方法
【解决方案2】:

你可以像这样使用os.system()(注意:通常最好使用subprocess来做这样的事情):

answer = 0
while answer < 5:
    answer = int(raw_input("coded by: Narralol\n\n"
    "Pick a task:\n"
    "1) Start Minecraft.exe\n"
    "2) Start Minecraft_Server.jar\n"
    "3) Backup your server\n"
    "4) Copy the backup to your desktop\n"
    "5) Exit\n").strip())
    if answer == 1:
        os.system('D:\Games\Minecraft\Minecraft.exe')
    elif answer == 2:
        os.system('D:\Games\Minecraft\Minecraft_server.jar')
    elif answer == 5:
        break

更改了代码中的其他一些小事情,例如检查一个 int 与另一个 int(而不是字符串与一个 int)等。

【讨论】:

  • 是的,非常感谢,它正在工作:) 我认为问题在于答案被识别为字符串而不是 int,因此它没有执行文件。它只是继续循环而不做任何事情。也许这可能是错误?
  • 没错,即:x = "1"; y = 1; x != y; int(x) == y; x == str(y)
  • 噢噢,是的,我现在明白了 :)。这很有道理!
猜你喜欢
  • 1970-01-01
  • 2010-12-04
  • 2013-07-17
  • 1970-01-01
  • 2017-08-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-05
相关资源
最近更新 更多