在运行Raspian,Apache服务器的Pi3上,我有一个Django应用。
我正在尝试从Django运行python文件。
如果我通过SSH进入我的Pi并输入“ python test_data.py”,则可以正常运行。我以“ pi”用户身份登录
test_data.py就是这样。
output = "success!"
print(output)
urls.py
url(r'^mygame/$', views.my_game),
views.py 文件,我具有以下
from subprocess import PIPE, run
def my_game(request):
command = ['sudo', 'python test_data.py']
result = run(command, stdout=PIPE, stderr=PIPE, shell=True, universal_newlines=True)
return render(request, 'rungame.html',{'data1':result})
通过网络浏览器调用/ mygame时,这是我在rungame.html中打印的结果,所以我知道它称为test_data.py。看来是权限问题?我不明白以下含义。有人可以告知这是否是权限问题,如何解决?
CompletedProcess(args=['sudo', 'python mygame.py'], returncode=1, stdout='', stderr='usage: sudo -h | -K | -k | -V\
nusage: sudo -v [-AknS] [-g group] [-h host] [-p prompt] [-u user]\
nusage: sudo -l [-AknS] [-g group] [-h host] [-p prompt] [-U user] [-u user]\n [command]\
nusage: sudo [-AbEHknPS] [-r role] [-t type] [-C num] [-g group] [-h host] [-p\n prompt] [-u user] [VAR=value] [-i|-s] [<command>]\
nusage: sudo -e [-AknS] [-r role] [-t type] [-C num] [-g group] [-h host] [-p\n prompt] [-u user] file ...\n')
谢谢
添加的信息: 创建mygame.py来测试概念
import pygame
import sys
pygame.init()
WIDTH = 800
HEIGHT = 600
screen = pygame.display.set_mode((WIDTH, HEIGHT))
background = pygame.image.load('background1.png')
print("test")
game_over = False
while not game_over:
screen.blit(background, (0, 0))
pygame.display.update()
for event in pygame.event.get():
print(event)
if event.type == pygame.QUIT:
sys.exit()
这是我的APACHE CONF文件
<VirtualHost *:80>
ServerName www.example.com
ServerAdmin webmaster@localhost
Alias /static /home/pi/Dev/ehome/src/static
<Directory /home/pi/Dev/ehome/src/static>
Require all granted
</Directory>
<Directory /home/pi/Dev/ehome/src/ehome>
<Files wsgi.py>
Require all granted
</Files>
</Directory>
WSGIDaemonProcess ehome python-path=/home/pi/Dev/ehome/src:/home/pi/Dev/ehome/lib/python3.5/site-packages
WSGIProcessGroup ehome
WSGIScriptAlias / /home/pi/Dev/ehome/src/ehome/wsgi.py
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>
# vim: syntax=apache ts=4 sw=4 sts=4 sr noet
答案 0 :(得分:1)
不要使用子进程来调用脚本。您有一个python脚本,使其成为一个函数并将其导入Django。然后在您的views.py中调用该函数。
test_data.py
void OnTick()
{
string signal = "";
double Sar = iSAR(_Symbol, _Period, 0.02, 0.2, 0);
if (Sar < Low[1] && Open[1] < Close[1])
{
signal = "buy";
}
if (Sar > High[1] && Open[1] > Close[1])
{
signal = "sell";
}
if (signal == "buy" && OrdersTotal() == 0)
OrderSend(_Symbol, OP_BUY, 0.01, Ask, 3, 20, 100, NULL, 0, 0, Green);
if (signal == "sell" && OrdersTotal() == 0)
OrderSend(_Symbol, OP_SELL, 0.01, Bid, 3, 20, 100, NULL, 0, 0, Red);
Comment("The Signal is :", signal);
if (Open[1] > Close[1] && OrdersTotal() > 0)
CloseBuyPosition();
if (Open[1] < Close[1] && OrdersTotal() > 0)
CloseSellPosition();
}
views.py
def my_function():
output = "success!"
return output
将 test_data.py 脚本与 views.py 放在同一目录中。