[英]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
,因此我使用%s
和line % 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.