我有一个ajax请求使用json将对象发送到python程序:
$.ajax({
url: "http://localhost/cgi-bin/python.cgi",
type: "POST",
data: JSON.stringify(myobject),
dataType: "text",
success: function(response){
console.log("it's alive");
console.log(response)
},
error: function(){
alert('request failed');
}
})
和python.cgi看起来像
import cgitb
cgitb.enable()
import sys, json
input =sys.stdin
output = json.loads(input)
json.dumps(output, sys.stdout)
这段代码给了我
TypeError:json对象必须是' str'不是' TextIOWrapper'
我不明白为什么会发生这种情况,因为我将数据作为字符串传递。
感谢您的帮助。
答案 0 :(得分:0)
如https://docs.python.org/2/library/cgi.html中所述,您应该使用FieldStorage类而不是直接从标准输入中读取:
[TestMethod]
public void Test_Should_Simulate_Command_Line_Argument() {
// Arrange
string[] expectedArgs = new[] { "Hello", "World", "Fake", "Args" };
var mockedCLI = new Mock<ICommandLineInterface>();
mockedCLI.Setup(m => m.GetCommandLineArgs()).Returns(expectedArgs);
var target = mockedCLI.Object;
// Act
var args = target.GetCommandLineArgs();
// Assert
args.Should().NotBeNull();
args.Should().ContainInOrder(expectedArgs);
}
在import cgi
print "Content-Type: application/json"
print
form = cgi.FieldStorage()
中,您可以访问您期望的数据。