Перенаправлять каждый вывод вызова подпроцесса в другой каталог в разных файлах - PullRequest
0 голосов
/ 12 июня 2018

У меня есть большой файл, который я хочу разделить, используя awk, и назовите его на основе значения из первого столбца.

Команда awk на терминале будет работать как:

cat phased.MySpF1.vcf | awk '!/^#/{print>$1}'

, таким образом, создавая отдельные файлы, такие как 1, 2, 3, в зависимости от значения первого столбца.


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

# create a directory to store the splitted files:
if os.path.exists('SplitVCF'):
    shutil.rmtree('SplitVCF', ignore_errors=False, onerror=None)
os.makedirs('SplitVCF')

# now split the vcf file
split_cmd = ['cat', vcf_path, '|', 'awk', '!/^#/{print>$1}']
subprocess.Popen(split_cmd, stdout='SplitVCF/')

#or,
subprocess.call(split_cmd, stdout='SplitVCF/')

Но я получаю сообщение об ошибке:

Traceback (most recent call last):
  File "phaser.py", line 2167, in <module>
    main();
  File "phaser.py", line 227, in main
    subprocess.Popen(split_cmd, stdout=&apos;SplitVCF/&apos;)
  File "/usr/lib/python2.7/subprocess.py", line 386, in __init__
    errread, errwrite), to_close = self._get_handles(stdin, stdout, stderr)
  File "/usr/lib/python2.7/subprocess.py", line 823, in _get_handles
    c2pwrite = stdout.fileno()
AttributeError: &apos;str&apos; object has no attribute &apos;fileno&apos;

1 Ответ

0 голосов
/ 12 июня 2018

Из docs

stdin, stdout и stderr задают дескрипторы стандартного ввода исполняемой программы, стандартный вывод и стандартный файл ошибок соответственно.Допустимые значения: PIPE, существующий файловый дескриптор (положительное целое число), существующий файловый объект и None

То есть не строка.Вместо этого

with open('a/file/path', 'w') as out:
     subprocess.Popen(split_cmd, stdout='out)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...