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

时间:2017-04-19 21:58:41

标签: python python-3.x config os.system

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

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

def launchappone():
os.system(appone)

我甚至把引号放在我有的配置文件中,但仍然没有骰子。有帮助吗?感谢。

5 个答案:

答案 0 :(得分:1)

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

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

可能还有一个问题是,readlines()会将文件中的所有行都作为列表返回,而将返回带有结束符的行。 使用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了

  

子流程模块提供了更强大的工具来生成新流程并检索其结果;使用该模块比使用此功能更可取。有关一些有用的配方,请参阅子流程文档中的“使用子流程模块替换旧函数”部分。

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

答案 1 :(得分:0)

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

from subprocess import call
call([appone])

答案 2 :(得分:0)

你的问题可能在于变量范围,你也应该使用像@MaxNoe这样的上下文管理器。

但是现在尝试将参数放到函数中。

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

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

答案 3 :(得分:0)

如果名为

的launchappone()方法,则代码可以正常工作
    import os

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

    def launchappone():
        os.system(appone)

    launchappone() # calling method

答案 4 :(得分:0)

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

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

echo%*

我把它放入c:\ Test Folder

我很明显在Windows上,我不知道这个问题是否适用于其他操作系统。还要注意我一直在Python 2.7.x中工作,所以这在Python 3中可能会有所不同,甚至2.7的更新补丁(我认为我最新尝试的是2.7.6)。

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

导入os

os.system('c:\ Test Folder \ test.bat') 'test.bat“”Hello“'无法识别为内部或外部命令, 可操作程序或批处理文件。

按预期失败,路径中有空格且没有引号。此外,反斜杠应该被转义(或用正斜杠替换)。

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

这很有效。我可以添加一个参数并获取回显:

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

但是,如果我引用它打破的参数:

os.system('“c:\ Test Folder \ test.bat”“Hello”') 'test.bat“”Hello“'无法识别为内部或外部命令, 可操作程序或批处理文件。

我尝试了各种各样的东西然后注意到开头的双引号丢失了。所以我加了一个,我得到了:

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

这样有效,但输出也缺少收盘报价。所以我加了一个额外的结束语:

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

(如果您不使用双引号,请注意以上所有更改。)

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