Saya telah menulis sedikit kode untuk menjalankan program (cutadapt) pada banyak file. namun itu memberikan kesalahan berikut untuk setiap file yang dicoba dijalankan: "cutadapt: ​​error: argumen yang tidak dikenal". Jalankan di MacOS, python 3.7.3,

Jika saya mencetak pernyataan dalam program yang sama, salin itu sebagai satu panggilan di terminal, maka itu berhasil. Apakah ada yang melihat apa yang saya lakukan salah?

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])

jadi output di terminal adalah:

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

Lalu, ketika saya menyalin pernyataan tercetak, itu berfungsi:

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).
0
newbie_here 30 Mei 2019, 01:08

2 jawaban

Jawaban Terbaik

Anda perlu memisahkan semua argumen; "--cut 20" meneruskan argumen tunggal yang berisi sakelar dan nilainya (bahwa ia memberi tahu program bahwa ia menerima sakelar tunggal bernama cut 20). Anda hanya akan meneruskannya sebagai argumen tunggal jika, pada baris perintah, Anda benar-benar memasukkan "--cut 20" dalam tanda kutip untuk mencegah spasi putih memecahnya menjadi bagian terpisah dari argv program (yang Anda jelas-jelas jangan dalam contoh Anda).

Pisahkan menjadi "--cut", "20" dan itu akan berfungsi.

1
ShadowRanger 29 Mei 2019, 22:14

Kode Anda meneruskan --cut 20 ke cutadapt sebagai argumen tunggal, yang tampaknya tidak dapat ditangani. (Dari sudut pandang pengurai argumen cutadapt, ia mungkin mengira Anda mencoba menentukan opsi bernama "cut 20", yang tidak ada.) Anda perlu membagi argumen menjadi dua:

subprocess.run(["cutadapt", "--cut", "20", "-o", output_file, input_file])
1
jwodder 29 Mei 2019, 22:16