使用我的Web应用程序中的Python子进程来调用外部脚本

时间:2013-09-17 07:02:32

标签: python python-2.7

我想在我的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应用程序调用时。可能是什么问题?

1 个答案:

答案 0 :(得分:1)

可能有以下几个原因:

  1. 当前目录不是您所期望的。在未指定当前目录的情况下使用subprocess.Popen()时,子进程将从父进程继承当前文件夹。因此它可能会在启动Web服务器的文件夹中运行。

    尝试绝对路径。

  2. 您的路径中缺少//usr/...。如果没有这个,脚本将再次相对于当前目录进行搜索。

  3. 在尝试修复其他问题之前,您应该真正修复错误处理。您应该从上面的代码中获得有用的错误消息。如果你没有,那么这是一个非常糟糕的迹象:这意味着你不会注意到以后会发生什么事情。

    在未来的某个时间,你会做一个小的改变,会破坏某些东西。如果没有良好的错误处理,这将被忽视。