使用 os.system 从分配给变量的路径启动可执行文件?

Use os.system to launch executable from path assigned to a variable?

第一次在这里提问。我想要做的是在将 exe 路径分配给变量后使用 os.system 启动可执行文件,并让 os.system 打开分配给变量的路径。如果我只是将路径粘贴在括号中(带有引号 ofc),它就可以正常工作,但是当我在那里只有变量时,它不会启动任何东西。我已经在同一个变量上尝试了打印功能,它正确地打印出了路径。这是我创建变量然后调用的内容。

config = open("config.txt")
lines=config.readlines()
appone = lines[0]

def launchappone():
os.system(appone)

我什至在我拥有的配置文件中的文本上加了引号,但仍然没有骰子。有什么帮助吗?谢谢

如今,您应该使用标准库 subprocess 模块来完成此类任务。

此外,您应该始终对文件使用上下文管理器。这些处理自动关闭和异常处理。

可能还有一个问题是,readlines() 会将文件中的所有行 return 作为一个列表,但 带有结束符 。 使用 f.read().splitlines() 删除尾线或在单独的行上调用 .strip()

放在一起:

import subprocess as sp

with open('config.txt') as config:
    lines = config.read().splitlines()

appone = lines[0]

def launch_appone():
    sp.run([appone])

编辑:python 文档也提到不应再使用 os.system

The subprocess module provides more powerful facilities for spawning new processes and retrieving their results; using that module is preferable to using this function. See the Replacing Older Functions with the subprocess Module section in the subprocess documentation for some helpful recipes.

https://docs.python.org/3/library/os.html#os.system

如果你只是需要它来执行你可以尝试使用来自子进程模块的调用

from subprocess import call
call([appone])

你的问题可能与变量范围有关,你也应该使用@MaxNoe 所说的上下文管理器。

但现在尝试为函数添加参数。

config = open("config.txt")
lines=config.readlines()
appone = lines[0]

def launchappone(appone):
    os.system(appone)

如果调用了 launchappone() 方法,您的代码就可以工作

    import os

    config = open("config.txt")
    lines=config.readlines()
    appone = lines[0]

    def launchappone():
        os.system(appone)

    launchappone() # calling method

我在使用 os.system 时遇到了一些问题,发现了一些很奇怪的东西,可能就是这里的问题所在。似乎 os.system 删除了命令字符串中的第一个和最后一个引号。

为了测试,我使用单个命令创建了一个名为 test.bat 的批处理文件:

回显%*

我放到了c:\Test文件夹

我显然在 Windows,我不知道这个问题是否会影响到其他 OS。另请注意,我一直在 Python 2.7.x 中工作,因此这在 Python 3 或什至更新的 2.7 补丁中可能有所不同(我认为我尝试过的最新版本是 2.7 .6).

我 运行 python 然后尝试一些基本命令。

进口os

os.system('c:\Test Folder\test.bat') 'test.bat" "Hello"' 未被识别为内部或外部命令, 可运行的程序或批处理文件。

按预期失败,路径中有一个 space 并且没有引号。此外,应转义反斜杠(或替换为正斜杠)。

os.system('"c:\Test Folder\test.bat"') ECHO 已开启。

这行得通。我可以添加一个参数并返回回声:

os.system('"c:\Test Folder\test.bat"你好') 你好

但是如果我引用它中断的参数:

os.system('"c:\Test Folder\test.bat" "Hello"') 'test.bat" "Hello"' 未被识别为内部或外部命令, 可运行的程序或批处理文件。

我尝试了各种方法,然后发现开头的双引号不见了。所以我多放了一个,我得到:

os.system('""c:\Test Folder\test.bat" "Hello"') “你好

这样有效,但输出也缺少 closing 引号。所以我放了一个额外的 closing 引用:

os.system('""c:\Test Folder\test.bat" "Hello""') "Hello"

(请注意以上更改的 none 是否转义双引号。)

所以...我不知道为什么会这样,但是嘿,你来了。