在python中使用相对路径执行批处理文件

nuypyhwy  于 2023-05-02  发布在  Python
关注(0)|答案(1)|浏览(149)

我想用python管理一些批处理文件,并在后面添加一个带有按钮的gui来执行这些文件。整个程序只能在windows机器上运行。我需要使它可移植的,所以它可以从任何文件夹运行。
我当前的代码如下所示

import subprocess
subprocess.call([r'C:\Users\Username\Desktop\app\test.bat'])

我尝试使用pathlib,但无法将变量(current_path)集成到子进程中:

from subprocess import Popen
import pathlib

current_path = pathlib.Path().resolve()

#print(current_path)
p = Popen("test.bat", cwd=r current_path)

我知道这可能是一个菜鸟问题,但我很感谢任何建议!我也搜索了论坛和网站,但没有找到任何有用的东西。

wydwbb8l

wydwbb8l1#

使用pathlib模块获取当前工作目录是正确的,该目录是Python脚本所在的文件夹。通过使用pathlib,您可以使脚本更具可移植性,这意味着无论它位于计算机上的哪个位置,它都可以工作。
当前实现的问题是Popen调用中的一个小错误。在代码的第二行中,cwd参数有语法错误。而不是“r current_path”,您应该删除“r”并将current_path变量直接放在“cwd="之后。
要解决这个问题,可以将代码更改为:

import subprocess
import pathlib

current_path = pathlib.Path().resolve()

p = subprocess.Popen("test.bat", cwd=current_path)

或者,您也可以使用os模块将工作目录更改为批处理文件的位置,然后使用www.example调用它 www.example.com ()。此方法允许您调用批处理文件,而无需指定其完整路径。
下面是一个例子:

import os
import subprocess
import pathlib

current_path = pathlib.Path().resolve()

# change the current working directory to the folder where the batch file is located
os.chdir(current_path)

# call the batch file
subprocess.call('test.bat')

无论脚本和批处理文件位于何处,这两个版本的代码都应该在Windows机器上工作。您可以稍后添加一个带有按钮的GUI,以便根据需要调用这些函数。

相关问题