【问题标题】:Subprocess File Operations in PythonPython中的子进程文件操作
【发布时间】:2020-02-24 14:17:40
【问题描述】:

我有一个命令行程序,可以通过以下子进程运行。

subprocess.call([CMD.bat, '-infile', infile1.tif, infile2.tif, '-outfile', outfile.tif])

当输入文件比较少的时候,上面的代码是没有问题的。

但是,当输入文件很多时,很难全部输入。所以,我想使用 glob.glob 来输入所有文件。

files = glob.glob("D:\\*.tif")

files = ",".join(files)

subprocess.call([CMD.bat, '-infile', files, '-outfile', outfile.tif])

不幸的是,这段代码根本没有运行。 如何解决这个问题?

任何想法,请帮忙。

【问题讨论】:

    标签: python command-line automation subprocess


    【解决方案1】:

    您不能将 files 作为单个参数放入,您需要将其解包:

    files = glob.glob("D:\\*.tif")
    subprocess.call(['cmd.bat', '-infile', *files, '-outfile', 'outfile.tif'])
    

    注意 * 用于解包参数。有关解包的更多信息,请参阅herehere

    无需先join 参数,这只会创建一个长字符串(仍然是一个参数)

    一个例子:

    files = ['1.tif', '2.tif']
    cmd = ['cmd.bat', '-infile', *files, '-outfile', 'outfile.tif']
    print(cmd) # ['cmd.bat', '-infile', '1.tif', '2.tif', '-outfile', 'outfile.tif']
    

    【讨论】:

    • 它就像魅力一样。如果您能详细说明* 的内容,将不胜感激。
    • @mk1 我在链接中编辑了一些额外的解释和示例
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-06-04
    • 2016-03-18
    • 2014-01-08
    • 2019-12-08
    相关资源
    最近更新 更多