我有一个nodejs应用程序,正在使用child_process
发送数据,以便在python脚本中运行,但是"sys.argv"
只返回"script1.py"
,文件名,而不是我想发送给python的对象。
下面是我的nodejs:
app.get("/", (request, response) => {
console.log('hi')
var dataToSend;
var nodeData = "jeff";
console.log('breh')
var obj = {obj1: image3v, obj2: image4v}
const python = spawn('python', ['script1.py'], obj);
console.log('welp')
python.stdout.on('data', function (data) {
dataToSend = data.toString();
});
python.stderr.on('data', data => {
console.error(`stderr: ${data}`);
console.log(data)
})
python.on('exit', (code) => {
console.log('exited')
console.log(dataToSend);
//run new stuffhere
});
})
我的网站script1.py:
import sys
print('python begins')
print(sys.argv[0])
print(sys.argv[0][1])
print(sys.argv[0][2])
print(sys.argv)
print(sys.orig_argv)
然而,python中的所有这些print语句都打印'script1.py'
、['script1.py']
,或者通过[0][1]
打印www.example.com中的一个字母,等等。如果我尝试执行sys.argv[1]
,我会得到超出边界的索引。script1.py via the [0][1]
, etc. If I try to do sys.argv[1]
, I get index out of bounds.
查看其他引用,我的代码应该可以工作,但是我认为有一些东西我没有看到。我不知道还有什么可以尝试访问该对象。
谢谢。
1条答案
按热度按时间z6psavjg1#
要
spawn
一个外部命令并在命令行上传递参数,参数需要被序列化,例如,变成一个字符串。命令行参数的大小是有限制的,所以如果它们太大,必须使用一些其他的方法(例如,通过stdin/stdout、命名管道等传递)。下面是一个从node到python传递参数的演示。
spawnSO.js
:spawned.py
:下面是输出: