0

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

4

1 回答 1

1

可能有几个原因:

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

    尝试绝对路径。

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

在尝试修复其他问题之前,您应该真正修复错误处理。您应该从上面的代码中得到有用的错误消息。如果你没有,那么这是一个非常糟糕的信号:这意味着你不会注意到以后有什么东西坏了。

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

于 2013-09-17T07:20:49.643 回答