【问题标题】:How to run command line python script in django view?如何在 django 视图中运行命令行 python 脚本?
【发布时间】:2010-02-12 15:14:28
【问题描述】:

我有一个 .py 文件,它的 php 文件运行如下:

$link = exec(dirname(__FILE__) . /xxx.py ' .excapeshellarg($url) . '2>&1', $output, $exit_code);

我想在我的 django 视图中运行xxx.py 并将输出分配给一个变量。 xxx.py 文件有一个 def main(url) 函数,底部有if __name__ == '__main__':。有没有办法可以编辑 xxx.py 文件并从我的视图中调用 def main 函数?

目前,当直接从视图调用时,它不像在命令行上运行那样运行。

感谢您的回复。

【问题讨论】:

    标签: python django command-line scripting


    【解决方案1】:

    有没有办法可以编辑 xxx.py 文件并从我的视图中调用 def main 函数?

    是的。修改 main 函数,使其将结果作为字符串返回,而不是将其打印到 stdout,这正是它目前正在做的事情。

    然后,在您的视图中,您可以执行以下操作:

    import xxx
    results = xxx.main('foo')
    # Do something with results
    

    【讨论】:

    • 是的,这似乎是正确的做法。但是在 xxx.py 文件中有一行这样做: net = pickle.load(open(pickle_file)) Django 在 pickle.py 文件的这一点上给出了一个错误,说没有名为神经网络的模块。 neuralnet.pkl 文件与 xxx.py 文件存在于同一目录中。我将所有包含我的脚本文件的文件夹添加到 pythonpath 但没有运气。我被难住了。 :S
    • +1 在您的“if name = 'main':”部分中,您可以执行相同操作并打印它以具有相同的行为比以前。 Django 是用 Python 编写的,因此它可以导入任何 Python 模块并在视图中使用它。
    • @ninja123:“没有名为神经网络的模块”错误听起来像是您的$PYTHONPATH 可能需要一些调整。在调用xxx.main 的Django 视图中,如果添加import neuralnet 行会发生什么?
    • @ninja123 您可能已经这样做了,但是您是否尝试过将文件夹的路径直接添加到 sys.path 中?例如:导入系统; sys.path.append('/path/to/module/')
    • 哦,在 .pkl 文件中的第一行是 '(ineuralnet',而 neuralnet.py 位于 xxx.py 的文件夹中,也许我需要将其更改为可以导入的内容?
    猜你喜欢
    • 2017-06-20
    • 2020-03-15
    • 2014-04-19
    • 2012-05-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-09-01
    相关资源
    最近更新 更多