所以我试图让我的项目尽可能简单,因此我决定在我的Python脚本中使用CGI来运行一个可以执行某些操作的程序。
所以这是我目前的设置:
在CMD中,我运行:
<?xml version="1.0" encoding="UTF-8"?>
<env:Envelope xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:wsdl="http://tempuri.org/"
xmlns:env="http://schemas.xmlsoap.org/soap/envelope/">
<env:Body>
<wsdl:authenticate>
<username>user</username>
<password>pwd</password>
<cultureInfo>it</cultureInfo>
</wsdl:authenticate>
</env:Body>
</env:Envelope>
这为我启动服务器。我可以通过python -m http.server --cgi 8000
访问它。
接下来,我试图通过输入脚本的实际地址来找到我的目录:localhost:8000
这是给我实际文件的输出,而不是实际正确读取它。我尝试了两种不同的方法来输出Python文件中的数据,例如:
localhost:8000/test/cgi-bin/test.py
和
import sys
sys.stdout.write("Content-type: text\html \r\n\r\n")
sys.stdout.write("<html><title>Hi</title><body><p>This is a test</p></body></html>")
这两个导致实际代码显示在我的浏览器中。
几个问题:
我试图避免安装任何新的依赖项并尽可能保持最小化。
我在Python3,Windows7上运行。我试图避免下载更多的pip包和依赖项,因为我的工作非常谨慎。
非常感谢任何帮助。
答案 0 :(得分:1)
首先,我想说2017年编写简单的CGI脚本是一种勇敢的方式。如果你使用bottle或烧瓶,你的生活会更容易。
但如果你愿意,这就是你可以开始的方式。
python -m http.server --cgi
假设cgi-bin
位于当前目录中。那就是你应该去test
目录并从那里开始命令。然后拨打http://localhost:8000/cgi-bin/test.py
。
您的cgi脚本不正确。该脚本应该是可执行的。我不确定在运行http.server
时是否需要Windows中的shebang行,但在Windows下使用Apache Web服务器运行CGI脚本时是必需的。 shebang行以#!
开头,然后包含python3解释器的完整路径,该行应以\n
结束而不是\r\n
,否则它将无法工作。
之后,您应该输出所有HTTP标题,打印一个空行,然后输出您的内容。所有HTTP标头都应由&#39; \ r \ n&#39;分隔开来。而不是&#39; \ n&#39;。
以下是适用于OS X的示例CGI脚本:
#!/usr/bin/env python3
import sys
sys.stdout.write('Status: 200 OK\r\n')
sys.stdout.write('Content-type: text/html;charset="utf-8"\r\n\r\n')
print('<h1>Hello, world!</h1>')
答案 1 :(得分:0)
我认为脚本的第一行需要指定解释器路径。一些例子是:
public class FMOD_AudioRecodingDSP
{
public static DSP_DESCRIPTION CreateDSPDesc(out FMOD_AudioRecodingDSP dspObj)
{
dspObj = new FMOD_AudioRecodingDSP();
var desc = new DSP_DESCRIPTION()
{
name = "AudioExport".ToCharArray(),
version = 1,
numinputbuffers = 1,
numoutputbuffers = 1,
read = dspObj.ReadAudioData,
};
return desc;
}
public RESULT ReadAudioData(ref DSP_STATE dsp_state, IntPtr inbuffer, IntPtr outbuffer, uint length, int inchannels, ref int outchannels)
{
UnityEngine.Debug.Log("Working???");
outbuffer = inbuffer;
outchannels = inchannels;
return RESULT.OK;
}
}
看看它是否有帮助。
答案 2 :(得分:0)
默认为[&#39; / cgi-bin&#39;,&#39; / htbin&#39;]并描述要视为包含CGI脚本的目录。
因此,http.server
期望在python.exe文件夹中的名为 / cgi-bin 或 / htbin 的子文件夹中找到CGI脚本。如果您确实想使用测试文件夹,请更改cgi-directories
脚本中的http/server.py
变量。