python - Python 中的子进程文件操作

标签 python command-line automation subprocess

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

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

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

任何想法,请帮助。

最佳答案

你不能把那个 files 作为一个单独的参数,你需要解压它:

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

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

不需要先加入参数,这只会创建一个长字符串(仍然是一个参数)

一个例子:

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']

关于python - Python 中的子进程文件操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58605775/

相关文章:

c# - 我怎么知道在发送打印命令(按下 "Ctrl+P"按钮)后我应该等待 PrintDialog 多长时间?

java - 如何通过重复步骤使用 jbehave 参数

python - 使用 sqlalchemy 将相关数据添加到 MySQL 数据库

bash - 使用 awk 在日志文件中将日期转换为 unix 纪元

git - 如何使用命令行 git 从 Github 接受 pull 请求 (PR)

java - 在 Spring Boot 命令行中传递多个参数

python - 无法使用 python 和 dogtail 自动执行远程程序,远程服务器中没有图形界面......

python - 在 python 中打印格式化列表和索引值的优雅方法?

python - 退出/退出 PyQt 程序的正确方法

python - 使用 python 正则表达式从 URL 中分离 Facebook URL 用户 ID