Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用Python 3.6';s subprocess.run()在Linux操作系统中执行.run文件_Python_Linux_Subprocess - Fatal编程技术网

如何使用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 )