如何将变量从Python传递给Windows命令提示符

2024-09-30 10:34:38 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在编写一个Python(2.5)脚本,它将搜索一个文件夹,获取一个特定的文件,然后将该文件和一个命令传递给Windows中的CMD shell。这需要使用命令program.exe /rptcsv <file being created> <file being used>完成。此外,必须从C:\Program Files(x86)\Reporter文件夹执行.exe,因此工作目录会发生更改。在

我的问题是:我需要Python搜索一个特定的文件(fnmatch),然后将整个命令传递给shell。正确完成后,进程将在后台运行,而不启动GUI。
我看过关于stdin的帖子。stdout等等,而且我不需要任何管道返回-我只需要Python来传递整个过程。现在发生的情况是Python启动GUI,但是无法传递包含变量的完整命令。有办法吗?
我仍然是python00b,所以请原谅任何明显的错误。在

MC01 = 'WKST01*.bat'
MC02 = 'WKST02*.bat'
files = os.listdir(FOLDER)

MC01_CMD = fnmatch.filter(files, MC01)
MC01_CSV = "MC01.csv"

exe = ("reporter.exe /rptcsv", MC01_CSV, MC01_CMD)
os.chdir("C:\Program Files (x86)\Reporter")
os.system("exe")

编辑:在我之前的代码中,我使用手术室步行在文件夹中:

^{pr2}$

因为我切换了工作目录,所以它在C:\ProgramFiles(x86)\Reporter中搜索MC01_CMD文件,(当然)它不在那里。有没有一种方法可以在不创建新变量的情况下连接pathname和MC01_CMD,这样它就得到了MC01_CMD的正确位置?在


Tags: 文件命令文件夹cmdosreporterfilesshell
2条回答

os.system接受单个字符串作为命令。在您的例子中,这是字符串"exe"。您需要连接fnmatch.filter返回的文件名,使用" ".join(exe),然后调用os.system(command)。注意缺失的“inos.system(command)。在

要在树中查找文件,只需将os.walk调用的基文件夹(绝对路径)与basedir和文件名连接起来。您也可以在os.walk期间过滤文件名。在

MC01 = 'WKST01*.bat'
MC02 = 'WKST02*.bat'

def collect_files(folder, pattern):
    for basedir, dirs, files in os.walk(folder):
        for file in fnmatch.filter(files, pattern):
                yield os.path.join(folder, basedir, file)


MC01_CMD = collect_files(FOLDER, MC01)
MC01_CSV = "MC01.csv"

command = "reporter.exe /rptcsv "+ MC01_CSV + " " + " ".join(MC01_CMD)
os.chdir("C:\Program Files (x86)\Reporter")
os.system(command)

变量不能在字符串文本中展开。因此os.system("exe")与在cmd中输入exe并按enter键相同。在

所以我猜正确的代码是:

MC01_CSV = MC01 + ".csv"

os.chdir("C:\Program Files (x86)\Reporter")
os.system("reporter.exe /rptcsv " + MC01_CSV + " " + MC01_CMD)

相关问题 更多 >

    热门问题