相关疑难解决方法(0)

983
推荐指数
17
解决办法
68万
查看次数

subprocess.Popen():OSError:[Errno 8] python中的exec格式错误?

昨天,我编写并运行了一个python script,它执行一个shellusing subprocess.Popen(command.split())where命令是字符串,它构成了.sh脚本及其参数.这个脚本工作正常,直到昨天.今天,我运行相同的脚本,现在我不断遇到这个错误.

p=subprocess.Popen(shell_command.split())
File "/usr/lib/python2.7/subprocess.py", line 679, in __init__
errread, errwrite)
File "/usr/lib/python2.7/subprocess.py", line 1249, in _execute_child
raise child_exception
OSError: [Errno 8] Exec format error
Run Code Online (Sandbox Code Playgroud)

我知道在提出这个问题之前有过类似的问题,但在我的情况下,我尝试了一切不能解决我目的的问题.使用shell=True不起作用,因为我的shell脚本调用另一个shell脚本,在此脚本之前必须设置一些环境才能运行该脚本.我严重陷入困境.我只是重启我的系统一次.我在用ubuntu 12.04

编辑:

 import subprocess
 import os
 import sys

 arg1=sys.argv[1]
 arg2=sys.argve[2]

 shell_command = 'my_path/my_shell.sh ' + arg1 + ' '+ arg2
 P = subprocess.Popen(shell_command.split())
 P.wait()
Run Code Online (Sandbox Code Playgroud)

my_shell.sh:

  arg1=$1
  arg2=$2

  cd $TOP
  setup the environment and run shell script
  build the kernel ...
  execute shell command .....
Run Code Online (Sandbox Code Playgroud)

python linux shell

36
推荐指数
3
解决办法
5万
查看次数

#!/ usr/bin/env和进程名称:价格可移植性?

使用#有很多好的 理由!在/ usr/bin中/ env的.底线:它使您的代码更具可移植性.好吧,有点儿.看一下这个....


我有两个几乎相同的脚本, bintest.py

#! /usr/bin/python
import time
time.sleep(5*60)
Run Code Online (Sandbox Code Playgroud)

envtest.py

#! /usr/bin/env python
import time
time.sleep(5*60)
Run Code Online (Sandbox Code Playgroud)

请注意,他们只是在他们的shebangs不同.


bintest.py 按预期运行

br@carina:~$ ./bintest.py & ps && killall bintest.py
[1] 15061
  PID TTY          TIME CMD
14625 pts/0    00:00:00 bash
15061 pts/0    00:00:00 bintest.py
15062 pts/0    00:00:00 ps
br@carina:~$ 
[1]+  Terminated              ./bintest.py

envtest.py做的事情不是最优的

br@carina:~$ ./envtest.py & ps && killall envtest.py
[1] 15066
  PID TTY          TIME CMD
14625 pts/0    00:00:00 bash
15066 pts/0    00:00:00 python
15067 …

command-line portability kill shebang environment-variables

6
推荐指数
1
解决办法
945
查看次数