将文本从stdin作为参数传递给Python中的Shell脚本

时间:2016-09-12 18:36:51

标签: python json shell subprocess syntaxnet

我有一个json文件,我必须在其中执行以下操作:

  1. 只运行"文字"通过Syntaxnet在json上的字段。
  2. 从Syntaxnet输出中,创建一个新的json字段,其外观如下:text_syntaxnet = [{'word' = <WORD1>, 'position = <word_position>, 'pos_tag' = <POS_TAG>}, {...........}]
  3. 将这个新的json字段添加到作为输入输入的原始json中。
  4. 我正在使用Pig Streaming这样做。我想将输入数据流式传输到函数parse.py,其内容为:

    import sys
    import re
    import subprocess
    import json
    
    
    def create_new_json_field(tags_list):
        word_tags = {}
        new_json_field = []
        for line in tags_list:
            line = line.strip()
            if not line:
                continue
            else:
                words = line.split()
                word_tags['word'] = words[1]
                word_tags['position'] = words[0]
                word_tags['pos_tag'] = words[4]
                new_json_field.append(word_tags.copy())
        return new_json_field
    
    
    def main(argv):
        try:
            for line in sys.stdin:
                json_original = json.loads(line)
                print json_original
                tags = subprocess.check_output('./parse.sh %s' % line, shell=True)
                tags_list = tags.split('\n')
                new_json_field = create_new_json_field(tags_list)
                result = json_original['text_syntaxnet'] = new_json_field
                print new_json_field
                print result
        except Exception as e:
            sys.stdout.write(str(e))
    
    main(sys.argv)
    

    parse.sh的内容是:

    #!/bin/sh
    cd ........../models/syntaxnet
    jq --raw-output '.["text"]' | syntaxnet/demo.sh
    

    我调用parse.sh的代码不起作用。休息所有的作品。我不确定它是否是命令的语法或某些环境问题。有人请帮我调试这个问题。

    注意:当我在for line in sys.stdinparse.py UnitOfMeasure时,subporcess调用有效。但我想这样做是因为我想逐行解析然后创建json对象。

    谢谢!

0 个答案:

没有答案