如何使用 Python 3.x 在命令行中执行多个命令

     2023-02-23     281

关键词:

【中文标题】如何使用 Python 3.x 在命令行中执行多个命令【英文标题】:How to execute multiple command in command line with Python 3.x 【发布时间】:2021-04-26 13:06:25 【问题描述】:

谢谢大家。我正在编写一个脚本来在命令行中执行多个命令。这是我整个剧本的一部分。

我检查了很多答案,但没有一个能解决我的问题。其中一些太旧而无法使用。

我的命令是这样的

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.runos.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)

我对子流程不太熟悉。但是我已经工作了一个星期来解决这个问题。这让我发疯。有什么建议吗?

【问题讨论】:

【参考方案1】:

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)

【讨论】:

谢谢,王。你说 cmd 应该是一个列表。但是subprocess.call("cd C:/Users/Bruce/Desktop/test && notepad", shell=True) 可以工作并打开记事本。但是当我使用subprocess.call("fds test.fds", shell=True) 时,它就不起作用了。但是,它可以在命令行中执行,os.system 可以正常运行。为什么 subprocess 不起作用而 os.system 起作用? 更新了一个示例供您使用 非常感谢,王。也许子进程中的 callPopen 出了点问题,我用 os.system 解决了这个问题。我认为子流程模块中一定存在错误。因为相同的代码在 os.system 上运行良好。

如何在 Windows 命令行中使用通配符解码多个文件 [关闭]

】如何在Windows命令行中使用通配符解码多个文件[关闭]【英文标题】:HowtodecodemultiplefilewithwildcardinWindowscommandline[closed]【发布时间】:2012-10-0322:12:57【问题描述】:我有(控制台)程序flac.exe,我希望能够在一个目录中将所有flac... 查看详情

使用 python 运行命令行操作

...可以用于在命令行中编写(例如subclass.Popen)。在OSX中,如何将函数放入python代码中以在命令行中执行?就我而言,我需要在我的python代码中执行(sudoipconfigs 查看详情

在单行命令行中执行多行语句?

...-line?【发布时间】:2011-01-0320:20:18【问题描述】:我正在使用Python和-c来执行单行循环,即:$python-c"forrinrange(10):print\'rob\'"这很好用。但是,如果我在for循环之前导入模块,则会出现语法错误:$python-c"impor 查看详情

如何在 Windows 命令行中使用参数运行 Python 脚本

】如何在Windows命令行中使用参数运行Python脚本【英文标题】:HowdoIrunPythonscriptusingargumentsinwindowscommandline【发布时间】:2013-07-0619:52:54【问题描述】:这是我的pythonhello.py脚本:defhello(a,b):print"helloandthat\'syoursum:"sum=a+bprintsumimportsys... 查看详情

如何在命令行中使用 & & & 符号在后台执行批处理文件,但传递参数?

】如何在命令行中使用&&&符号在后台执行批处理文件,但传递参数?【英文标题】:HowCanIexecuteabatchfileibackgroundusing&ampersandincommandline,butpassingparameters?【发布时间】:2021-08-2002:10:41【问题描述】:我有以下批处理文件... 查看详情

如何在命令行中可靠地使用“rem”而不忽略相邻命令?

】如何在命令行中可靠地使用“rem”而不忽略相邻命令?【英文标题】:Howtoreliablyuse`rem`withinacommandlinewithoutignoringadjacentcommands?【发布时间】:2016-04-1905:43:36【问题描述】:我正在尝试使用rem命令在包含多个命令的命令行中添加... 查看详情

如何在linux命令行中替换多个文件中的字符串

】如何在linux命令行中替换多个文件中的字符串【英文标题】:Howtoreplaceastringinmultiplefilesinlinuxcommandline【发布时间】:2012-07-0816:47:26【问题描述】:我需要替换文件夹中很多文件中的字符串,只有ssh可以访问服务器。我该怎么做... 查看详情

如何在 Python 3.x 中使用带有模块的 cx_Freeze 编译可执行文件

】如何在Python3.x中使用带有模块的cx_Freeze编译可执行文件【英文标题】:Howtocompileexecutablewithcx_FreezewithmodulesinPython3.x【发布时间】:2018-11-1219:48:54【问题描述】:这是我在这里的第一篇文章,所以如果我犯了错误,请告诉我,我... 查看详情

mysql中如何在命令行中,执行一个sql脚本文件?(代码片段)

需求描述:  在mysql数据库的使用中,有的时候,需要直接在shell的命令行中,执行某个SQL脚本文件,  比如,要初始化数据库,创建特定的存储过程,创建表等操作,这里进行一个基本的测试。  一般情况,mysql都是以交... 查看详情

如何在命令行中编译多个java源文件

】如何在命令行中编译多个java源文件【英文标题】:Howtocompilemultiplejavasourcefilesincommandline【发布时间】:2011-06-1514:33:11【问题描述】:我知道运行javacfile1.java会产生file1.class如果file1.java是唯一的源文件,那么我可以说javafile1来... 查看详情

如何在 Python 3.x 中传递命令行参数?

】如何在Python3.x中传递命令行参数?【英文标题】:HowtopasscommandlineargumentsinPython3.x?【发布时间】:2015-12-1620:46:49【问题描述】:我没有得到这个程序想要的输出?fromsysimportargvscript,first,second,third=argvprint("Thescriptiscalled:",script)prin... 查看详情

解决python在命令行中执行提示“nomodulenamedxxx”的方法

...量中包含模块所在目录。PYTHONPATH环境变量的内容会因为使用的操作系统不同而有所差异(参见下面的“环境变量”),但从基本上来说,它与sys.path很类似——一个目录列表。 查看详情

如何在命令行中从脚本运行函数?

】如何在命令行中从脚本运行函数?【英文标题】:HowcanIrunafunctionfromascriptincommandline?【发布时间】:2012-02-0717:46:55【问题描述】:我有一个脚本,它有一些功能。我可以直接从命令行运行其中一个函数吗?这样的?myScript.shfunc(... 查看详情

无法使用 system() 在 matlab 中运行可执行文件,但它可以在命令行中运行

】无法使用system()在matlab中运行可执行文件,但它可以在命令行中运行【英文标题】:Can\'trunanexecutablefileinmatlabwithsystem(),butitworksincommandline【发布时间】:2014-06-2203:29:46【问题描述】:我需要使用Matlab中的系统命令运行一个使用O... 查看详情

sh如何在mysql客户端命令行中执行sql文件(代码片段)

查看详情

linux命令行中执行多个命令(代码片段)

 [[email protected]/]#date;date;date2019年05月03日星期五09:08:37CST2019年05月03日星期五09:08:37CST2019年05月03日星期五09:08:37CST[[email protected]/]#date&&data&&date2019年05月03日星期五09:09:0 查看详情

如何使用python在CMD中执行命令?

】如何使用python在CMD中执行命令?【英文标题】:HowtoexecutecommandsinCMDusingpython?【发布时间】:2020-09-1818:21:50【问题描述】:我想使用python自动化cmd命令,但我也希望命令在CMD中显示,就像我在启动脚本后手动编写的那样。因此... 查看详情

使用 exec() 在 cmd 行中的电子 js 上执行命令“ADB 设备”

】使用exec()在cmd行中的电子js上执行命令“ADB设备”【英文标题】:Executingcommand\'ADBdevices\'onelectronjsincmdlineusingexec()【发布时间】:2018-10-0418:37:45【问题描述】:我用的是electronjs,有点新手。据我所知,我们可以使用所有npm包,... 查看详情