с помощью subprocess.run программа не работает, но копирование текста из прогона ([xxx]) работает.какие-либо предложения - PullRequest
0 голосов
/ 30 мая 2019

Я написал небольшой кусочек кода для запуска программы (cutadapt) на нескольких файлах. однако для каждого файла, который он пытается запустить, выдается следующая ошибка: «cutadapt: ​​error: нераспознанные аргументы». Запуск на MacOS, Python 3.7.3,

Если я распечатываю инструкцию в той же программе, копирую ее как один вызов в терминале, тогда он работает. Кто-нибудь видит, что я делаю не так?

import glob

import subprocess

fastq_folder = "/path/2019.01_spades_output_pathodetect/FASTQ_trimming"

listoffiles = glob.glob(fastq_folder + "/*.gz")

for fastq in listoffiles:
    input_file = fastq
    output_file = fastq.replace("_001.fastq.gz", "_001CUT20.fastq.gz")
    output_file = fastq.replace("2019.01_spades_output_pathodetect/FASTQ_trimming/", "2019.01_spades_output_pathodetect/FASTQ_trimming/CUT20/")
    print("cutadapt", "--cut 20", "-o", output_file, input_file)
    subprocess.run(["cutadapt", "--cut 20", "-o", output_file, input_file])

поэтому выходной сигнал на терминале:

cutadapt --cut 20 -o /path/2019.01_spades_output_pathodetect/FASTQ_trimming/CUT20/AWGS09281_S20_L001_R2_001.fastq.gz /path/2019.01_spades_output_pathodetect/FASTQ_trimming/AWGS09281_S20_L001_R2_001.fastq.gz
Run "cutadapt --help" to see command-line options.
See https://cutadapt.readthedocs.io/ for full documentation.

cutadapt: error: unrecognized arguments: /path/2019.01_spades_output_pathodetect/FASTQ_trimming/AWGS09281_S20_L001_R2_001.fastq.gz

Затем, когда я копирую напечатанное заявление, оно работает:

cutadapt --cut 20 -o /path/2019.01_spades_output_pathodetect/FASTQ_trimming/CUT20/AWGS09281_S20_L001_R2_001.fastq.gz /path/2019.01_spades_output_pathodetect/FASTQ_trimming/AWGS09281_S20_L001_R2_001.fastq.gz


This is cutadapt 2.3 with Python 3.7.3
Command line parameters: --cut 20 -o /path/2019.01_spades_output_pathodetect/FASTQ_trimming/CUT20/AWGS09281_S20_L001_R2_001.fastq.gz /path/2019.01_spades_output_pathodetect/FASTQ_trimming/AWGS09281_S20_L001_R2_001.fastq.gz
Processing reads on 1 core in single-end mode ...
[   8<-------] 00:00:06       490,635 reads  @     13.6 µs/read;   4.42 M reads/minute
Finished in 6.71 s (14 us/read; 4.39 M reads/minute).

Ответы [ 2 ]

1 голос
/ 30 мая 2019

Ваш код передает --cut 20 в cutadapt как один аргумент, который он, очевидно, не может обработать.(С точки зрения анализатора аргументов cutadapt, вероятно, он думает, что вы пытаетесь указать параметр с именем "cut 20", который не существует.) Вам необходимо разделить аргумент на две части:

subprocess.run(["cutadapt", "--cut", "20", "-o", output_file, input_file])
1 голос
/ 30 мая 2019

Вам необходимо разделить все аргументы;"--cut 20" передает один аргумент, содержащий как переключатель, так и его значение (что он сообщает программе, что получил один переключатель с именем cut 20).Вы передадите его только как один аргумент, если в командной строке вы буквально передали "--cut 20" в кавычках, чтобы не допустить разбиения пробела на отдельные части argv программы (чего вы явно не используетеваш пример).

Разбейте его на "--cut", "20" и оно должно работать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...