python-3.x - 如何使用 Python 3.x 在命令行中执行多个命令
问题描述
谢谢大家。我正在编写一个脚本来在命令行中执行多个命令。这是我整个剧本的一部分。
我检查了很多答案,但没有一个能解决我的问题。其中一些太旧而无法使用。
我的命令是这样的
cd C:/Users/Bruce/Desktop/test
set I_MPI_ROOT=C:\Program Files\firemodels\FDS6\bin\mpi
set PATH=%I_MPI_ROOT%;%PATH%
fds_local -o 1 -p 1 test.fds
python test.py
我尝试使用subprocess.run或os.system等,但它们不起作用。我不知道发生了什么。这是我用过的一个例子。
file_path = "C:/Users/Bruce/Desktop/test"
cmd1 = 'cd ' + file_path
cmd2 = "set I_MPI_ROOT=C:/Program Files/firemodels/FDS6/bin/mpi"
cmd3 = "set PATH=%I_MPI_ROOT%;%PATH%"
nMPI = '-p {}'.format(1)
nOpenMP = '-o {}'.format(1)
cmd4 = "fds_local {} {} ".format(nMPI, nOpenMP) + file_name
cmd = '{} && {} && {} && {}'.format(cmd1, cmd2, cmd3, cmd4)
subprocess.Popen(cmd, shell=True)
我对子流程不太熟悉。但是我已经工作了一周来解决这个问题。这让我发疯。有什么建议么?
解决方案
cmd 需要是一个文本列表,就像你在 shell 上看到的任何内容一样,用空格分隔。例如 "ls -l /var/www" 应该是 cmd=['ls','-l','/var/www']
也就是说,使用 os.chdir 更好地完成 cd。Set 最好将环境字典提供给子进程调用。多行最好通过将几行放入一个 shell 脚本(可以接受参数)来完成,这样你就不必在 python 中搞砸了。
这是一个例子。如果命令不在 OS 的 $PATH 中,您可以完全限定其路径
from subprocess import Popen
cmd=['cd',r'C:\Program Files (x86)\Notepad++','&&','notepad','LICENSE','&&',r'D:\Program\Tools\Putty.exe','-v']
d=Popen(cmd, shell=True)
推荐阅读
- ruby-on-rails - 如果对象仅存在于两个数组之一中,则删除记录
- django - 增加帖子查看次数的最佳方法
- sockets - Flutter `socket_io_client` 将 socket.on(event, data) 转换为流并在动态生成的流构建器中使用
- python - 如何从python中的字符串中删除所有字符,直到第n个字符X出现
- validation - 如果 yii2 中另一组字段为空,我想设置一组字段。任何一组字段都需要完美填写(必填)
- javascript - 如何在模糊时触发 React-hook-form Controller 验证?
- python - Tkinter 帧大小定义为父帧大小的一部分
- javascript - JS 对象、Python 字典和 C++ 结构之间有什么区别?
- java - 可以在 solr 中执行不带字段名的部分搜索
- python - 如何创建数据框并使用数组和 for 循环调用它们?