无法打开文件: [Errno 2] 没有该文件或目录

3 投票
2 回答
9059 浏览
提问于 2025-04-17 01:40

我在用子进程调用 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

撰写回答