如何使用Python 3.6的subprocess.run()在Linux操作系统中执行一个.run文件

16 浏览
0 Comments

如何使用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()语法?谢谢。

0
0 Comments

问题的出现原因是在使用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()函数是不必要的和避免的。

0