python - 子进程中带有变量的命令行
问题描述
我想在脚本的子进程中使用变量运行此命令。
变量是:
filenames[k]
filenames
有很多名字(字符串),我可以用k
.
命令是:
python3 train.py "C:\Users\Tommy\data\\"+filenames[k] "C:\Users\Tommy\data\\"+filenames[k]+"_model" --choice A
我想在脚本中运行这个命令作为子进程:
subprocess.run([" python3 train.py "C:\Users\Tommy\data\\"+filenames[k] "C:\Users\Tommy\data\\"+filenames[k]+"_model" --choice A "])
但是语法有问题。我不知道是什么。我在 Windows 上使用 Python 3.6.8 运行它。
解决方案
我认为你迷失了字符串连接......你必须通过以下方式执行 cmd run
:作为字符串或作为列表(因为列表通常更具可读性!)
案例:args
作为字符串
cmd = f'python3 train.py "C:\Users\Tommy\data\\{filenames[k]}" "C:\Users\Tommy\data\\{filenames[k]}+_model" --choice A'
subprocess.run(args=cmd, shell=True)
案例:args
作为列表
cmd = f'python3 train.py "C:\Users\Tommy\data\\{filenames[k]}" "C:\Users\Tommy\data\\{filenames[k]}+_model" --choice A'
cmd = cmd.split(' ') # provided that no white spaces in the paths!!
subprocess.run(args=cmd, shell=False)
备注:
“新”字符串连接非常方便,
f"smt {variable} smt else"
其中变量是之前定义的变量如果你希望你的程序从 shell 启动,那么你需要添加一个 kwrags 参数
shell=True
,默认值False
。在这种情况下,根据您选择args
是字符串还是列表,您应该更加小心:来自文档“如果 shell 为 True,建议将 `args 作为字符串而不是序列传递”查看Popen Constructor的文档以获取签名的完整描述
推荐阅读
- ruby-on-rails - 在 ruby on rails 6 中使用 rswag 记录 API GET 请求
- c++ - 是否可以通过 Visual Studio 从仅标头文件制作静态库?
- combobox - 按 Tab 更改从组合框中选择的数据
- typescript - 如何使用 sinon 模拟独立的导入函数
- node.js - 打字稿形式中的多个模式
- android - 由于未经认证的广告 SDK,Play 商店拒绝了应用
- vue.js - NuxtJs Auth 中没有设置策略
- python - 如何同时切过数组的两个轴?
- python - 如何根据列值(用户 ID)和时间戳范围(每小时)绘制箱线图
- python-3.x - TypeError: 必须是实数,而不是 NoneType (Python3, kivy)