【发布时间】:2019-12-07 17:20:40
【问题描述】:
我有一个扩展名为 .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 "<pyshell#51>", line 1, in <module>
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() 语法?谢谢。
【问题讨论】:
-
“什么都没发生”是什么意思?
myfile.run输出的东西,你检查过result吗? -
@wizzwizz4 没有错误消息。该文件假设将一堆文件复制/安装到另一个目录。但什么都没发生?
-
os.stat(path) 说什么?
-
@wizzwizz4 How do I change directory cd in Python? 上的解决方案已过时。 Python 3.6 中的
subprocess.run()具有cwd关键字参数。因此,不需要os.chdir()命令来解决错误的目录问题。正确的做法是设置subprocess.run()的cwd关键字参数的值。感谢您删除您的评论,即这是一个重复的问题,因为它不是。 -
shebang 将位于您尝试在子进程中运行的 Bash 脚本的顶部。这是基本的 Unix 101,所以它确实已经被覆盖了数百次。
标签: python linux subprocess