子进程spawnSync使用for循环迭代python stdout结果

2024-04-19 01:21:45 发布

您现在位置:Python中文网/ 问答频道 /正文

首先我会发布我的代码

我将举例说明我面临的问题:

        for(var i=0;i<arrayleng.length;i++){
        var oneScript = spawnSync('python',["/home/demo/mypython.py",arrayleng[i].path]);
        //console.log(String(oneScript.stdout));

        fs.readFile('/home/demo/' + arrayleng[i].filename + '.json','utf8',function(err,data){
                if(err){
                    console.log(err);
                }else{
                    console.log(data);
                }
            })          
    };

我希望spawn child是同步的,因为我的python脚本将返回一些文件,每次执行python脚本后都必须读取这些文件。但现在它在执行完Python。还有在控制台上打印一次。相反每次执行python脚本后打印。在


Tags: 文件代码脚本loghomefordatademo
1条回答
网友
1楼 · 发布于 2024-04-19 01:21:45

下面是一个nodejs示例:

var fs = require('fs')
var checkThese = ['/Users/jmunsch/Desktop/code_scraps/1.json', '/Users/jmunsch/Desktop/code_scraps/2.json']

checkThese.forEach(function(checkThisPath){
    // Both of these will log first
    console.log(`run first: ${checkThisPath}`)
    var data = fs.readFileSync(checkThisPath, 'utf8')
    var theJson = data
    console.log(`run first: ${theJson}`)

    // it might make sense that this would execute next
    // but it doesn't
    fs.readFile(checkThisPath, 'utf8', function(err, data){
        // this callback executes later
        console.log(`run second: ${checkThisPath}`)
        console.log(`run second: ${data}`)
    })
})

下面是一个python脚本和nodejs脚本的示例,以及它们的工作方式。在

python脚本listdir.py

^{pr2}$

在上面的脚本中,我使用了print,它在每一行后面附加一个\n字符。如果您计划使用python的write将一个文件stdoutsys.stdout.write,则不会添加换行符。在

nodejs代码:

var child_process = require('child_process');
var spawnSync = child_process.spawnSync

var checkThese = ['/Users', '/Users/jmunsch']

for (var i=0; i < checkThese.length;i++){
    var checkThisPath = checkThese[i]
    console.log(`Checking: ${checkThisPath}`)
    var oneScript = spawnSync('python',["listdir.py", checkThisPath]);
    oneScript.output.forEach(function(buffer){
        if (buffer){
            // convert to string
            var x = buffer.toString('utf8')
            console.log(`typeof x: ${typeof x}`)
            // split by new line character
            var y = x.split('\n')
            console.log(`typeof y: ${typeof y}`)
            // turn it into an array
            var z = Array.prototype.slice.call(y)
            // iterate each line in the array
            z.forEach(function(pythonOutput){
                console.log(`One python print(): ${pythonOutput}`)
            })
        }
    })    
}

nodejs代码的输出:

Checking: /Users
typeof x: string
typeof y: object
One python print(): .localized
One python print(): administrator
One python print(): casperadministrator
One python print(): jmunsch
One python print(): Shared
One python print(): 
typeof x: string
typeof y: object
One python print(): 
Checking: /Users/jmunsch
typeof x: string
typeof y: object
One python print(): .account
One python print(): .ansible
One python print(): .bash_sessions
One python print(): .cache
One python print(): .CFUserTextEncoding
One python print(): .config
One python print(): .cups
One python print(): .DS_Store
One python print(): .eclipse
One python print(): .gitconfig
One python print(): .ipython
One python print(): .lesshst
One python print(): .lldb
One python print(): .local
One python print(): .m2
One python print(): .netrc
One python print(): .node-gyp
One python print(): .node_repl_history
One python print(): .npm
One python print(): .nvm
One python print(): .oh-my-zsh
One python print(): .oracle_jre_usage
One python print(): .p2
One python print(): .profile
One python print(): .putty
One python print(): .python-eggs
One python print(): .rediscli_history
One python print(): .RSA
One python print(): .sh_history
One python print(): .ssh
One python print(): .swift
One python print(): .tooling
One python print(): .Trash
One python print(): .vagrant.d
One python print(): .viminfo
One python print(): .wget-hsts
One python print(): .zcompdump-LM-SFA-11003286-5.0.8
One python print(): .zsh-update
One python print(): .zsh_history
One python print(): .zshrc
One python print(): Applications
One python print(): Desktop
One python print(): Documents
One python print(): Downloads
One python print(): eclipse
One python print(): git
One python print(): Library
One python print(): Movies
One python print(): Music
One python print(): Pictures
One python print(): Public
One python print(): synced
One python print(): THEBIGPIN
One python print(): VirtualBox VMs
One python print(): 
typeof x: string
typeof y: object
One python print(): 

相关问题 更多 >