Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/364.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
当被节点js调用时,Python3不会写入文件_Python_Node.js_Reactjs - Fatal编程技术网

当被节点js调用时,Python3不会写入文件

当被节点js调用时,Python3不会写入文件,python,node.js,reactjs,Python,Node.js,Reactjs,我在服务器端使用Node和Python3。基本上,Node(作为我的后端)从我的前端获取数据输入,并调用执行一系列任务的python。除了在文件上写入(“backupdatea”)之外,所有任务都是有序、完美地执行的。奇怪的是,若python3是从终端调用的,那个么它就可以完美地写入文件 这是我的python文件: def backUpData(data): ff = open("backup.txt",'a') ff.write(data+"\n") ff.close(

我在服务器端使用Node和Python3。基本上,Node(作为我的后端)从我的前端获取数据输入,并调用执行一系列任务的python。除了在文件上写入(“backupdatea”)之外,所有任务都是有序、完美地执行的。奇怪的是,若python3是从终端调用的,那个么它就可以完美地写入文件

这是我的python文件:

def backUpData(data):
    ff = open("backup.txt",'a')
    ff.write(data+"\n")
    ff.close()


if __name__ == '__main__':
    data = " ".join(map(str,sys.argv[1:])).strip().lower()
    backUpData(data) #function that does not work when invoked by Node
    data = otherFunction1(data) #it works perfectly
    print(data) #this is what returned to Node
这是调用python的节点:

async function searchWeb({ query }, res) {
      var spawn = require("child_process").spawn,
      process = spawn("python", [pathToPython, "mypython.py", data]);
      process.stdout.on("data", function(data) {
      res.json({ reply: data.toString("utf8") });
  });
 }
我想一个解决方案是直接从节点写入,但我不是来这里寻找第二个解决方案的。我只是想知道为什么我在控制台上运行

 $python3 mypython.py data 
然后,它可以完美地工作,并将数据附加到backup.txt文件中,而当node执行此操作时,它不会在其上写入数据

python版本是python3.5,运行命令python或python3.5(从控制台)会给出相同的输出,因为它们是相同的版本


谢谢

与从控制台运行python脚本相比,Node.js中的
spawn()
方法可能会以不同的相对路径启动python进程。您需要使用文件的绝对路径或更改相对路径,以便找到正确的目录。

问题很可能是由相对路径错误引起的。打开文件时,请尝试在python脚本中使用该文件的完整路径。@dobrofirm就是这样!我真傻,它一直在写,只是不在同一个目录上!谢谢美好的我也把它作为答案贴了出来,这样你就可以结束这个问题了。