如何使用Python 3.6';s subprocess.run()在Linux操作系统中执行.run文件
我有一个扩展名为如何使用Python 3.6';s subprocess.run()在Linux操作系统中执行.run文件,python,linux,subprocess,Python,Linux,Subprocess,我有一个扩展名为.run的文件,例如myfile.run。它是可执行的,即权限级别已正确设置 在Linux终端中,我可以通过提交/myfile.run来执行它 在Python 3.6中,我尝试使用subprocess.run()函数执行相同的文件,但没有成功:(我试过: 及 什么也没发生 我应该使用的正确的子流程.run()语法是什么?谢谢。使用子流程.run()执行可执行文件的正确语法是: result = subprocess.run( ['/bin/bash', '/home/user1/
.run
的文件,例如myfile.run
。它是可执行的,即权限级别已正确设置
在Linux终端中,我可以通过提交/myfile.run
来执行它
在Python 3.6中,我尝试使用subprocess.run()
函数执行相同的文件,但没有成功:(我试过:
及
什么也没发生
我应该使用的正确的
子流程.run()
语法是什么?谢谢。使用子流程.run()
执行可执行文件的正确语法是:
result = subprocess.run( ['/bin/bash', '/home/user1/myfile.run'], stdout=subprocess.PIPE )
本质上,.run
文件是一个bash脚本,要运行bash文件,我需要激活/bin/bash
。通常用于在终端中运行bash脚本的
符号不能在子进程中工作。run()
。因此,必须显式声明/bin/bash
在解决我的问题后,我发现由myfile.run
bash脚本创建的数据被写入保存提交subprocess.run()的python脚本的目录的子目录中
函数。但是,此结果是错误的。数据应该写入包含myfile.run
bash脚本的目录的子目录中;这是在终端中提交/home/user1/myfile.run
时的结果
关于如何在python中更改当前工作目录的一个常见视图是使用函数os.chdir()
(请参阅)。但是,我发现函数subprocess.run()
在Python 3.6中有一个当前的工作目录关键字参数kwarg
称为cwd=None
。因此,为了解决我的错误目录问题(如上所述),我只需将我想要的工作目录等同于cwd
,例如cwd='/home/user1/Project'
。这意味着使用os.chdir()
使用子流程.run()
函数是不必要的,也是可以避免的。你说的“什么都没发生”是什么意思?myfile.run
输出东西,你检查过结果吗?@wizzwizz4没有错误消息。该文件应该复制/安装一堆文件到另一个目录。但是什么都没发生?什么os.stat(path)显示?@wizzwizz4上的解决方案已过期。Python 3.6中的subprocess.run()
具有cwd
关键字参数。因此解决错误的目录问题不需要os.chdir()
命令。正确的方法是设置subprocess.run()的cwd
关键字参数的值
。感谢您删除您的评论,这是一个重复的问题,因为它不是。shebang将出现在Bash脚本的顶部,您正在尝试在子进程中运行该脚本。这是基本Unix 101,因此它确实在以前被讨论过数百次。
result = subprocess.run( ['/home/user1/myfile.run'], stdout=subprocess.PIPE )
result = subprocess.run( '/home/user1/myfile.run', stdout=subprocess.PIPE, shell=True )
result = subprocess.run( ['/bin/bash', '/home/user1/myfile.run'], stdout=subprocess.PIPE )