子流程中包含变量的命令行

2024-05-13 11:27:58 发布

您现在位置: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上用Python3.6.8运行这个程序


Tags: 字符串py命令脚本名称datamodel进程
1条回答
网友
1楼 · 发布于 2024-05-13 11:27:58

我想你会迷路的字符串连接。。。您必须找到使用run或类似方式执行cmd的方法:要么作为字符串,要么作为列表(因为列表通常更具可读性!)

大小写: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作为字符串而不是序列传递”

  • 查看docs,在Popen构造函数中,获取签名的完整描述

相关问题 更多 >