繁体   English   中英

Python-os.fork()之后无法subprocess.call

[英]Python - Can't subprocess.call after os.fork()

我有一个分叉的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])
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])

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM