如何在子进程模块中的列表中使用索引?

时间:2012-03-21 13:48:42

标签: python linux subprocess

没有使用python,所以还在学习。基本上,我有一个与特定工作相关的ID列表。目前我只想传递列表中的第一个ID(使用a [0])并将请求的输出打印到hello.txt。所以整个命令本身看起来像bjobs -l 000001> hello.txt的。完成后,我可以循环遍历整个ID文件,为每个命令输出创建一个单独的文件。

#! /usr/bin/python

import subprocess

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

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

任何帮助将不胜感激!如果我还没有弄清楚某些事情,那么请问我,我会尝试解释。

2 个答案:

答案 0 :(得分:3)

如果您只想要第一个ID,请执行:

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输出的提取和写入分开,因为你可能想对它做一些事情,或者你可能会用Python编写bjobs所以......好吧这个将事情分开。

如果你想循环所有id,你可以这样做:

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 :(得分:1)

此文件如何命名为spam.py

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

然后使用python spam.py > hello.txt调用它。