簡體   English   中英

適用於Python的Perl的Linux命令

[英]Linux Command for Perl in Python

我正在嘗試使用Python(v2.6)中的Perl(v5.10.1)這個Linux命令

perl tilt.pl *.pdb > final.txt

我該怎么做才能將Perl腳本應用於每個PDB文件,最好的例子是?

我當前的腳本是這樣的:

import shlex, subprocess
arg_str = "perl tilt.pl frames > final.txt"
arg = shlex.split(arg_str)

print(arg)

import os
framespdb = os.listdir("prac_frames")

for frames in framespdb:
        subprocess.Popen(arg, stdout=True)

您可以使用shell=True

順便說一句:我認為您嘗試在命令中將可變frames替換為文本frames ,因此我使用%sline % frames來做到這一點。

import os
import subprocess

line = "perl tilt.pl %s > final.txt"

framespdb = os.listdir("prac_frames")

for frames in framespdb:
    cmd = line % frames
    print(cmd)
    subprocess.Popen(cmd, shell=True)

編輯:如果您需要不同文件中的結果,則可以再次使用%s向命令添加唯一的文件名-例如:

import os
import subprocess

line = "perl tilt.pl %s > final-%s.txt" # second `%s`

framespdb = os.listdir("prac_frames")

for frames in framespdb:
    cmd = line % (frames, frames) # second `frames`
    print(cmd)
    subprocess.Popen(cmd, shell=True)

編輯:通常在外殼中,您可以在屏幕上發送結果或將其重定向到file > file.txt 要在屏幕上獲取文本並將其保存在文件中,您需要shell命令tee和python命令subprocess.check_output()

import os
import subprocess

line = "perl tilt.pl %s | tee final-%s.txt"

framespdb = os.listdir("prac_frames")


for frames in framespdb:
    cmd = line % (frames, frames)
    print(cmd)
    output = subprocess.check_output(cmd, shell=True)
    print 'output:', output

如果覆蓋shell參數,則可以像從shell一樣調用子進程:

subprocess.call(arg_str, shell=True)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM