You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Python subprocess读取crontab报错:未知用户tango

问题解决方法

错误原因

  1. 参数拆分错误:subprocess.run的列表参数中,'-u tango'被当作单个参数传递,sudo会把整个带前导空格的字符串当作用户名,因此提示unknown user: tango。正确做法是把-u和tango拆成两个独立参数。
  2. 重定向符号不生效:>>是Shell的重定向特性,subprocess默认不启动Shell,所以会被当作crontab命令的参数,而非执行文件追加操作。

两种解决方案

方案一:启用Shell执行(简单但需注意安全)

直接将完整命令作为字符串传入,开启shell=True让Shell处理重定向逻辑:

import subprocess

subprocess.run('sudo -u tango crontab -l >> /tmp/crontango.txt', shell=True)

⚠️ 注意:如果命令包含用户可控的输入内容,shell=True可能存在Shell注入风险,需谨慎使用。

方案二:Python原生处理输出(更安全)

通过subprocess捕获命令输出,再用Python原生逻辑写入文件,避免依赖Shell:

import subprocess

try:
    # 执行命令并捕获标准输出
    cmd_output = subprocess.run(
        ['sudo', '-u', 'tango', 'crontab', '-l'],
        capture_output=True,
        text=True,
        check=True
    ).stdout
    
    # 以追加模式写入目标文件
    with open('/tmp/crontango.txt', 'a', encoding='utf-8') as f:
        f.write(cmd_output)
except subprocess.CalledProcessError as e:
    print(f"命令执行失败: {e.stderr.strip()}")

这种方式更安全,还能通过try-except捕获并处理命令执行失败的场景。

内容的提问来源于stack exchange,提问作者tangomike

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.04 01:05:18