代码之家  ›  专栏  ›  技术社区  ›  JPV

bash和python

  •  1
  • JPV  · 技术社区  · 6 年前

    我对嵌入bash和python脚本很感兴趣。基本思想是,我的bash命令的输出作为Python的输入。

    我有一组压缩文件,我想通过选择一块数据来减小大小。事实上,bash可以解压,处理大型文件的速度比python快得多。

    channel="Channel_08"
    channelafter="Channel_10"
    source=/Home/linux/test/*.zip  
    destination=/home/linux/test2 
    
    for file in $source
    do filename=$(basename $file); eval "head -\$((\$(unzip -c \$file | grep -n \$channelafter |cut -f1,1 -d':')-8)) <(unzip -c \$file)|tail -\$((\$(unzip -c \$file | grep -n \$channelafter |cut -f1,1 -d':')-\$(unzip -c \$file|grep -n \$channel |cut -f1,1 -d':')))" > $destination/"$filename".txt; echo "$filename".txt
    done
    

    生成的文件的大小要小得多,只有从一个通道到另一个通道的选定数据。

    现在,我需要运行一个python脚本,而不是将输出写入> $destination/"$filename".txt 我可以用它来读取和处理数据。这个脚本将每天用守护进程自动运行

    class App():
        def __init__(self):
            self.stdin_path = '/dev/null'
            self.stdout_path = '/dev/tty'
            self.stderr_path = '/dev/tty'
            self.pidfile_path =  '/tmp/foo.pid'
            self.pidfile_timeout = 5
        def run(self):
            while True:
                #process = psutil.Process(os.getpid())
                #print(process.memory_info().rss)
                routine()
                print("Running")
                time.sleep(3600*24)
    def routine(): 
    
    for line in $filename:
        df.iloc[count] = line
        count +=1
    

    请记住,我的python安装在Windows上,但我仍然需要运行bash命令。

    2 回复  |  直到 6 年前
        1
  •  0
  •   marekful    6 年前

    了解 pipe symbol 在shell编程中。就像在命令行上一样,您可以使用链接命令,这样左侧的输出将作为右侧的输入接收。

    所以不是重定向 > $destination/"$filename".txt ,你可以 | /path/to/python-script.py .

    现在,左边发送到stdout的内容都可以从右边的stdin中读取。根据右边的内容(它可以是可执行程序或脚本),您可能有特定的方法告诉它从stdin读取。

        2
  •  2
  •   aldokkani    6 年前
    import subprocess
    filenames = subprocess.check_output("./shellscript.sh", shell=True).decode()  # Decode to convert bytes to str
    filenames = filenames.split('\n')  # or whatever the splitter eg. space.
    for line in filenames:
    # your logic