我想在我的usr / local / bin目录中运行一个Python脚本“test.py”,它将在同一目录中创建一个文本文件,并为其写一些简短的文本。
此脚本由代码中的Python子进程调用,该代码响应对我的Web应用程序的GET请求,该应用程序位于var / www
subprocess.Popen(["python", "usr/local/bin/test.py"])
代码运行时没有错误,但是没有创建文本文件。要做到这一点的代码很简单:
myfile = open('test.txt','w+')
myfile.write("Write some text\n")
myfile.close()
我尝试过传递选项,包括shell = True。同样,我试图使用os.system()提供的接口,也无济于事。
仅出于测试目的,我已经授予所有相关目录的完全权限。
通过CLI运行test.py脚本按预期工作,但不是在Web应用程序调用时。可能是什么问题?
答案 0 :(得分:1)
可能有以下几个原因:
当前目录不是您所期望的。在未指定当前目录的情况下使用subprocess.Popen()
时,子进程将从父进程继承当前文件夹。因此它可能会在启动Web服务器的文件夹中运行。
尝试绝对路径。
您的路径中缺少/
:/usr/...
。如果没有这个,脚本将再次相对于当前目录进行搜索。
在尝试修复其他问题之前,您应该真正修复错误处理。您应该从上面的代码中获得有用的错误消息。如果你没有,那么这是一个非常糟糕的迹象:这意味着你不会注意到以后会发生什么事情。
在未来的某个时间,你会做一个小的改变,会破坏某些东西。如果没有良好的错误处理,这将被忽视。