如何使用Python 3.6的subprocess.run()在Linux操作系统中执行一个.run文件
如何使用Python 3.6的subprocess.run()在Linux操作系统中执行一个.run文件
我有一个以.run
为扩展名的文件,例如myfile.run
。它是可执行的,即权限级别已正确设置。
在Linux终端中,我可以通过输入./myfile.run
来执行它。
在Python 3.6中,我尝试使用subprocess.run()
函数执行相同的文件,但没有成功。:( 我尝试了以下代码:
result = subprocess.run( ['./home/user1/myfile.run'], stdout=subprocess.PIPE ) Traceback (most recent call last): File "", line 1, in result = subprocess.run( [a], stdout=subprocess.PIPE ) File "/usr/lib/python3.6/subprocess.py", line 423, in run with Popen(*popenargs, **kwargs) as process: File "/usr/lib/python3.6/subprocess.py", line 729, in __init__ restore_signals, start_new_session) File "/usr/lib/python3.6/subprocess.py", line 1364, in _execute_child raise child_exception_type(errno_num, err_msg, err_filename) NotADirectoryError: [Errno 20] Not a directory: './home/user1/myfile.run'
我尝试了以下代码:
result = subprocess.run( ['/home/user1/myfile.run'], stdout=subprocess.PIPE )
和
result = subprocess.run( '/home/user1/myfile.run', stdout=subprocess.PIPE, shell=True )
但没有发生任何事情。
请问我应该使用什么样的subprocess.run()
语法?谢谢。
问题的出现原因是在使用Python 3.6的subprocess.run()函数执行一个.run可执行文件时,无法直接使用"."符号来执行bash脚本。解决方法是显式地声明使用/bin/bash来执行bash文件。代码如下:
result = subprocess.run(['/bin/bash', '/home/user1/myfile.run'], stdout=subprocess.PIPE)
解决了这个问题后,发现由myfile.run脚本创建的数据被写入了包含我的Python脚本的目录的子目录中,这是错误的。正确的结果应该是将数据写入包含myfile.run脚本的目录的子目录中,这是在终端中提交./home/user1/myfile.run时的结果。为了解决这个问题,可以使用subprocess.run()函数的当前工作目录关键字参数cwd=None。只需将所需的工作目录赋值给cwd即可解决错误的目录问题,例如cwd='/home/user1/Project'。这意味着使用os.chdir()函数与subprocess.run()函数是不必要的和避免的。