使用 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.
如果你只是需要它来执行你可以尝试使用来自子进程模块的调用
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 是否转义双引号。)
所以...我不知道为什么会这样,但是嘿,你来了。
第一次在这里提问。我想要做的是在将 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.
如果你只是需要它来执行你可以尝试使用来自子进程模块的调用
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 是否转义双引号。)
所以...我不知道为什么会这样,但是嘿,你来了。