私はsnpSiftと呼ばれるJavaツールを実行しています。そのような私はpythongスクリプトを使用して、サブプロセスを使用しています。複数の文字列を一緒に付加して印刷すると、二重引用符があるところで '/'文字がスローされます
java -jar SnpSift.jar filter "ANN[0].EFFECT has 'variant'" input.vcf > ~/output.vcf
このコマンドは、コマンドラインで直接使用したのと同じですが、実際にコマンドを使用しています。私は、variypという名前のリストを作成しました。このリストには、snpSiftを実行するときに変数として使用する異なるバリアントの文字列が含まれています。
コマンドライン入力全体を各ファイルと各variantTypeの文字列として含む別のリスト(コマンド)を作成しようとしています。私のスクリプトは以下の通りです:
command = []
for file in os.listdir("filepath"):
absfile = os.path.abspath(file)
if(file.endswith(".vcf")):
for i in variantType:
w = 'java -jar SnpSift.jar filter "'
x = "ANN[0].EFFECT has "
y = "'" + i + "'"
z = '" ' + absfile + " > output." + i + "." + str(file)
command.append(w+x+y+z)
私の問題は、フィルタの入力は、このように引用符を有していなければならないことである:二重引用符を使用してこれを行うには"ANN[0].EFFECT has 'variant'"
私の試みは失敗した、との結果きました次の出力:
'java -jar SnpSift.jar filter "ANN[0].EFFECT has \'transcript_ablation\'" input.vcf > ~output.vcf'
これらの '\'文字を削除するにはどうすればよいですか? y(文字列全体のその部分を含む変数)を印刷すると、これらの文字は印刷されませんが、コマンド全体を印刷すると、それらが存在するため、コマンドを正しく実行できません。
EDIT
私が使用:
print(command[0])
これは( '\' なし)希望コマンドを出力します。
私が使用した場合にのみこれは、次のとおりです。
command[0]
問題が発生しています。
感謝を。ステートメントを印刷するときに推奨することはありますが、 'for i in command: subprocess.call(i)'を使用してサブプロセスを実行する場合は、/と同じ問題が発生します。 – spiral01
私の例を 'w = '/ bin/echo" \' {v} \ '"'。format(v = i)'に置き換えてみることができます。次に、forループ 'print(subprocess.call(x、shell = True))'でこのコマンドを起動しようとします(そうでなければ、サブプロセスは_x_を異なって解釈します。 _echo_は '' test''です。それはあなたのために働くのですか?エラーメッセージは何ですか? – mjoppich