首页 文章

如何在Windows中将变量从Python传递到CMD

提问于
浏览
0

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

这是我的问题:我需要Python来搜索一个特定的文件(fnmatch),然后将整个命令传递给shell . 正确完成后,该过程将在后台运行,而无需启动GUI .
我需要任何管道传输 - 我只需要Python来传递整个事情 . 现在发生的事情是Python启动GUI但无法通过变量传递命令 . 有没有办法做到这一点?
我仍然是Python n00b,所以请原谅任何明显的错误 .

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")

编辑:在我的代码中,我在文件夹中使用了os.walk:

print "Walking directory..."
    for root, dirs, files in os.walk(FOLDER):
        for file in files:
            pathname = os.path.join(root, file)

因为我切换了工作目录,它在C:\ Program Files(x86)\ Reporter中搜索MC01_CMD文件,(当然)它不在那里 . 有没有办法连接路径名和MC01_CMD而不创建新变量,所以它有正确的MC01_CMD位置?

2 回答

  • 0

    os.system将一个字符串作为命令 . 在您的情况下,这是字符串 "exe" . 您需要使用 " ".join(exe) 连接 fnmatch.filter 返回的文件名,然后调用 os.system(command) . 注意缺少“在 os.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)
    
  • 0

    变量不会在字符串文字中扩展 . 因此 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)
    

相关问题