第一次在这里问一个问题。我想要做的是在将exe路径分配给变量之后使用os.system启动可执行文件,并让os.system打开分配给变量的路径。如果我只有在括号中使用的路径(使用引号ofc),它可以正常工作但是当我只有变量时,它不会启动任何东西。我在同一个变量上尝试了print函数,它正确地输出了路径。以下是我创建变量然后调用的内容。
config = open("config.txt")
lines=config.readlines()
appone = lines[0]
def launchappone():
os.system(appone)
我甚至把引号放在我有的配置文件中,但仍然没有骰子。有帮助吗?感谢。
答案 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了
子流程模块提供了更强大的工具来生成新流程并检索其结果;使用该模块比使用此功能更可取。有关一些有用的配方,请参阅子流程文档中的“使用子流程模块替换旧函数”部分。
答案 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)
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“”') “你好”
(如果您不使用双引号,请注意以上所有更改。)
所以...我不知道为什么会这样,但是,嘿,你就是。