在Python中运行Bash命令由于新的lin而导致不正确的结果

2024-10-05 10:37:35 发布

您现在位置:Python中文网/ 问答频道 /正文

我用Python运行一个命令的子进程,这个命令使用ClamScan扫描USB驱动器中的病毒,这个命令在终端中执行时运行得很好,但是当我在Python脚本中运行它时,它创建了一个临时输出文件,但是这个文件不包含预期的结果,其中,直接运行它可以得到预期的结果

cmd = "clamscan -r --infected --no-summary " + drivePath + " > tempout.txt"
clamScan = subprocess.check_output(cmd, shell = True)

查看clamScan的输出如下:

clamscan -r --infected --no-summary /media/root/USB 
> tempout.txt

tempout.txt已创建,但随后为空。跑步 clamscan-r--已感染--无摘要/media/root/USB>;tempout.txt文件 通过终端创建一行文件,这是预期的结果。似乎通过subprocess函数运行该命令会导致变量drivePath后面的行返回,但我不确定原因是什么


Tags: 文件no命令txtcmd终端summarymedia
1条回答
网友
1楼 · 发布于 2024-10-05 10:37:35

我不确定使用“>;”重定向是否有效在python里面。可以使用subprocess.Popen()函数,该函数允许对输入/输出进行更多控制。stdout的输出可以重定向到一个文件,例如:

import subprocess, sys

clamscan_cmd="clamscan -r  infected  no-summary {}".format(drivepath)

with open('tmpout.txt', 'w') as tmp_file:
    p=subprocess.Popen(clamscan_cmd.split(), stdout=tmp_file)
    out, err = p.communicate()
    if err or p.returncode != 0:
        print("clamscan failure: \nReturn Code: {}\n Error output: {}".format(p.returncode, err))
        sys.exit(1)

相关问题 更多 >

    热门问题