2011-04-15 95 views
0

是否有可能在Django中使用可执行文件。例如,我有一个Django表单需要输入一个文件。我想将该文件作为参数传递给脚本/可执行文件/程序,并使用django输出结果。这个想法有什么好的起点?非常感谢可执行文件和Django

+0

“可执行文件”是什么意思?二进制?脚本?你到底什么意思?此外,你将如何防止这代表无尽的安全问题? – 2011-04-15 19:59:27

+0

可执行文件我的意思是像下面这个例子那样的应用程序:我把一个图像/文件作为输入,将图像/文件作为参数传递给应用程序并修改图像。 – Bigdinrock 2011-04-15 20:12:13

+0

所以“使用Django的可执行文件”意味着一些Python脚本或代码能够完成一些工作?任何Python脚本或代码都可以与Django一部分的Python一起使用。究竟是什么**使您对编写Python代码感到困惑? – 2011-04-15 20:33:21

回答

1

的问题,你应该,你会问是否有可能在python。基本上所有你需要做的就是将输入内容输入到一个python脚本中,你可以从你的django视图中调用,或者不是。一旦运行执行subprocess命令与您的可执行文件,并采取结果。 :)

Goodluck。

+0

“是否有可能在Python中”。诚然,问题是关于Python的语言,而不是Django的框架。然而,这是一个*无用的问题。 Python中的任何可能 - 问题是有多少工作,多少风险以及多少安全漏洞。 – 2011-04-15 20:03:04

0

是的,你可以做到这一点。在Python中有几种不同的方式。如果你想读取输出并使用它,那么你可能想popen,发现在http://docs.python.org/library/os.html#os.popen

警告,这可能是非常危险的。如果添加到命令行的数据是恶意的(甚至是偶然的),那么你可能会在服务器上造成不好的事情。您正在有效地向提交表单的人员提供在Web服务器具有相同权限的情况下在服务器上运行命令的功能。

import os 
ls_fd = os.popen('ls -l /tmp') 
output = ls_fd.read() 
ls_fd.close() 

这样做你的ls_fd是一个类似于对象的文件。你读。()它就像一个文件。你只能做一次,然后你就在文件的最后。同样,你应该在完成后关闭()它。

强烈考虑将用户输入添加到命令行。你可以创建一个可能的选项列表,然后给用户一个他们想要的选择。然后,您可以不使用用户的输入并将其添加到命令行的末尾,而可以使用其中一个预配置的命令行并执行该命令。

+0

我不想在命令行中使用输入。我想将它作为参数传递给应用程序。 – Bigdinrock 2011-04-15 20:09:55

+0

如果将它作为一个段添加,那么它仍然是命令行的一部分,应该小心处理。例如:cmd ='ls -l%s'%arg – newz2000 2011-04-16 21:49:40

1

你想要这样的东西吗?

>>> import commands 
>>> commands.getstatusoutput('pwd') 
(0, '/home/efazati') 
+0

是的,像这样但没有像pwd这样的标准unix命令,但是使用像./myscript这样的自定义脚本 – Bigdinrock 2011-04-15 20:15:35

+0

@Bigdinrock它的终端...您可以使用所有的东西 – Efazati 2011-04-15 21:15:42