Как использовать индексы в списке в модуле подпроцесса? - PullRequest
3 голосов
/ 21 марта 2012

Python не очень много, поэтому все еще учусь.По сути, у меня есть список идентификаторов, которые относятся к конкретной работе.Сейчас я просто хочу иметь возможность передать первый идентификатор в списке (используя a [0]) и распечатать вывод запроса в hello.txt.Таким образом, вся команда будет выглядеть как bjobs -l 000001> hello.txt.Как только я это сделаю, я могу пройтись по всему файлу идентификаторов, чтобы создать отдельный файл для каждой команды вывода.

#! /usr/bin/python

import subprocess

a = [ln.rstrip() for ln in open('file1')]

subprocess.call(["bjobs -l ", a[0], "> hello.txt"], shell=True)

Любая помощь будет принята!Если я ничего не прояснил, то, пожалуйста, спросите, и я постараюсь объяснить.

Ответы [ 2 ]

3 голосов
/ 21 марта 2012

Если вам нужен только первый идентификатор, выполните:

with open('file1') as f:
    first_id = next(f).strip()

Оператор with откроет файл и обязательно закроет его.

Тогда вы можете получить вывод bjobs с чем-то вроде:

output = subprocess.check_output(["bjobs", "-l", first_id], shell=True)

И напишите:

with open('hello.txt', 'wb') as f:
    f.write(output)

Я предлагаю разделить выборку и запись выходных данных bjobs, потому что вы, возможно, захотите что-то с этим сделать, или, возможно, вы напишите bjobs в Python, так что ... Что ж, это разделит вещи .

Если вы хотите зациклить все идентификаторы, вы можете сделать это:

with open('file1') as f:
    for line in f:
        line = line.strip()
        # ...

Или с enumerate, если вам нужен номер строки:

with open('file1') as f:
    for i, line in enumerate(f):
        line = line.strip()
        # ...

Я знаю, что я немного опередил то, что вы просили, но кажется, что вы начинаете что-то создавать, поэтому я подумал, что это может быть полезно.

1 голос
/ 21 марта 2012

Как насчет этого файла с именем spam.py:

with open('file1') as f:
  for line in f:
    subprocess.call([ 'bjobs', '-l', line.rstrip() ])

Затем позвоните, используя python spam.py > hello.txt.

...