无法打开文件: [Errno 2] 没有该文件或目录
我在用子进程调用 newtest.py 这个程序时遇到了以下错误。这个代码是作为一个守护进程运行的。当我启动这个守护进程时,它调用了这个程序,最开始运行得很好,成功启动了 8 个进程,但之后就开始出现错误,而且每次调用都会出现这个错误。
错误信息是:
/opt/local/Library/Frameworks/Python.framework/Versions/2.6/Resources/Python.app/Contents/MacOS/Python: can't open file 'newtest.py': [Errno 2] No such file or directory
下面是代码:
for index,row in enumerate(jobs):
if index <= new_jobs :
dirs=row[0]
dirName=os.path.join(homeFolder,dirs)
logFile=os.path.join(dirName,(dirs+".log"))
proc=subprocess.Popen(["/opt/local/bin/python2.6","newtest.py",dirs],stdout=open(logFile,'a',0),stderr=open(logFile,'a',0))
proId= proc.pid
我尝试使用 newtest.py 的完整路径,但还是出现同样的错误。有什么建议吗?非常感谢!
2 个回答
0
我不太记得在Linux系统上是否遇到过这个问题,但现在我在MacOS上遇到了同样的错误。
我想我找到了解决办法;你需要切换到你在分叉进程中的目录。我现在在类似于/Users/me/dev/project/
的地方,并且在运行bin/my-daemon start
。
在代码中,在daemonize方法的开头,我把cwd = os.getcwd()
的结果存到一个变量里,然后在分叉的地方调用os.chdir(cwd)
。
已经过去半个多小时了,通常情况下,守护进程应该会抛出No such file or directory
的错误,但现在还没有。这可能不是个问题,如果你的pid文件使用的是绝对路径(比如/var/run/my.pid
),但我使用的是相对于我的项目的路径,因为我可能没有写权限,而且用户可能会指定写入的位置。
编辑:刚意识到这个问题已经很久了,提问者的代码可能涉及到不同的问题。这是我使用的守护进程代码,稍微修改过:
https://www.jejik.com/articles/2007/02/a_simple_unix_linux_daemon_in_python/
我希望这个回答能帮助到某个人。
1
试试这个:
subprocess.Popen(['/opt/local/bin/python2.6','/FULL/PATH/TO/FILE/newtest.py'],stdout=subprocess.PIPE)
这样可以吗?去掉了一些参数等等。
另外,你能试试这个:
f = open('/FULL/PATH/newtest.py')
print f