Python - 在os.fork()之后可以进行subprocess.call

时间:2015-07-17 10:42:47

标签: python python-2.7 subprocess fork openwrt

我有一个forked python进程需要执行另一个python脚本。 我在OpenWRT中使用python 2.7。

Traceback (most recent call last):
  File "./twitter.py", line 61, in <module>
    subprocess.call(['./tweet.py', text])
  File "/usr/lib/python2.7/subprocess.py", line 493, in call
    return Popen(*popenargs, **kwargs).wait()
  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 2] No such file or directory
Exception in thread Thread-1 (most likely raised during interpreter shutdown):
Traceback (most recent call last):
File "/usr/lib/python2.7/threading.py", line 551, in __bootstrap_inner

这是我如何分叉过程:

try:
pid = os.fork()
print pid
if pid > 0:
    # Exit parent process
    sys.exit(0)
except OSError, e:
    self.logger("Fork failed")
    sys.exit(1)

以下是我尝试调用另一个脚本的方法:

subprocess.call(['./tweet.py', text])

1 个答案:

答案 0 :(得分:3)

OSError: [Errno 2] No such file or directory

此错误表示Python无法找到文件./tweet.py。 默认情况下,Python查找当前工作目录,即脚本名称的目录。请注意,这可能与脚本所在的目录不同。

尝试提供绝对路径,或使用os.chdir更改为包含tweet.py的目录,或根据其与__file__(调用脚本的路径)的关系构建路径。例如,如果tweet.py与调用脚本位于同一目录中,则可以使用:

tweetpath = os.path.join(os.path.dirname(__file__), 'tweet.py')
subprocess.call([tweetpath, text])