首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

dd从bash返回0,但如果使用subprocess.run()运行,则返回错误

在使用 Python 的 subprocess.run() 函数运行 dd 命令时,如果 dd 命令在 Bash 中返回 0(表示成功),但在 subprocess.run() 中返回错误,可能是由于以下几个原因之一:

  1. 命令语法问题:在 subprocess.run() 中传递命令时,命令和参数需要作为列表传递,而不是单个字符串。
  2. 权限问题:某些 dd 操作可能需要更高的权限(例如,写入到某些设备文件)。
  3. 环境变量问题subprocess.run() 运行的环境可能与直接在 Bash 中运行的环境不同。

以下是一些常见的解决方案和示例代码:

1. 确保命令和参数正确传递

subprocess.run() 中,命令和参数应该作为列表传递。例如:

代码语言:javascript
复制
import subprocess

# 正确的方式:将命令和参数作为列表传递
result = subprocess.run(['dd', 'if=/dev/zero', 'of=/tmp/testfile', 'bs=1M', 'count=1'], capture_output=True, text=True)

print("Return code:", result.returncode)
print("stdout:", result.stdout)
print("stderr:", result.stderr)

2. 检查权限问题

如果 dd 命令需要更高的权限,您可能需要使用 sudo。在 subprocess.run() 中使用 sudo 时,您可能需要提供密码,或者确保脚本在具有适当权限的环境中运行。

代码语言:javascript
复制
import subprocess

# 使用 sudo 运行 dd 命令
result = subprocess.run(['sudo', 'dd', 'if=/dev/zero', 'of=/tmp/testfile', 'bs=1M', 'count=1'], capture_output=True, text=True)

print("Return code:", result.returncode)
print("stdout:", result.stdout)
print("stderr:", result.stderr)

3. 检查环境变量

有时,环境变量可能会影响命令的执行。您可以通过 env 参数传递特定的环境变量,或者使用 os.environ 来设置环境变量。

代码语言:javascript
复制
import subprocess
import os

# 使用当前环境变量运行 dd 命令
result = subprocess.run(['dd', 'if=/dev/zero', 'of=/tmp/testfile', 'bs=1M', 'count=1'], capture_output=True, text=True, env=os.environ)

print("Return code:", result.returncode)
print("stdout:", result.stdout)
print("stderr:", result.stderr)

4. 捕获输出和错误信息

使用 capture_output=True 参数来捕获标准输出和标准错误,以便更好地调试问题。

代码语言:javascript
复制
import subprocess

result = subprocess.run(['dd', 'if=/dev/zero', 'of=/tmp/testfile', 'bs=1M', 'count=1'], capture_output=True, text=True)

print("Return code:", result.returncode)
print("stdout:", result.stdout)
print("stderr:", result.stderr)

5. 检查错误信息

如果 dd 命令返回错误,检查 stderr 以获取详细的错误信息。

代码语言:javascript
复制
import subprocess

result = subprocess.run(['dd', 'if=/dev/zero', 'of=/tmp/testfile', 'bs=1M', 'count=1'], capture_output=True, text=True)

if result.returncode != 0:
    print("Error running dd command:")
    print(result.stderr)
else:
    print("dd command ran successfully")
    print(result.stdout)
相关搜索:如果使用--aot,则angular 2 cli返回错误如果值为0而不使用CASE语句,则返回1Go:异步启动HTTP服务器,但如果启动失败则返回错误使用Coalesce后,如果PostgreSQL 9.2数据库的连接查询中未返回任何结果,则返回0PHP:如果在数字前使用0,ksort返回错误的结果bash:如果一个步骤退出并返回错误,则停止标记为失败的子step脚本从可观察对象列表中返回第一个发出的结果,如果为空,则返回错误使用exec从正在运行的Docker容器中分配并返回bash变量如果未选择任何图片,则使用双击加载图像的ActiveX图像框返回RunTime错误53如何对Flux中的项进行计数,如果Count大于X则返回错误,否则继续使用Pipeline如果在Windows Server2016上以非管理员身份运行,则exit /b 0在process.exitValue中返回1如何在django rest框架中开始运行服务器时检查redis连接是否可用,如果未连接则返回错误响应java file可以在cmd中运行,但当使用.jar扩展名重命名时,会返回错误如果使用python spaCy PhraseMatcher从两个模式中的每一个找到一个匹配,则返回match使用pydrive从google共享驱动器下载文件,文件存在,但API返回404找不到文件错误Python使用循环比较两个列表,如果找到匹配,则运行几个代码,然后返回到循环以测试是否存在另一个匹配在使用迁移助手从英特尔移动到苹果硅M1后使用R返回错误:可执行文件中的CPU类型错误和未定义的错误:0
相关搜索:
页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

  • 【愚公系列】2021年12月 Python教学课程 26-系统编程

    否则返回 False os.path.isdir(path) 如果 path 是一个存在的目录,返回 True。...如果可选参数 onerror 被指定, onerror 必须是一个函数,该函数有一个 OSError 实例的参数,这样可以允许在运行的时候即使出现错误的时候不会打断 os.walk()的执行,或者抛出一个异常并终止...os.system(command) 运行操作系统命令,直接显示结果。返回值是 0 或-1,不能获得显示在屏幕上的数据。 command 是要执行的命令字符串。...check:如果该参数设置为 True,并且进程退出状态码不是 0弹出CalledProcessError 异常。...如果你在调用run()方法时,设置了参数 stderr=subprocess.STDOUT,错误信息会和 stdout 一起输出,此时 stderr 的值是 None。

    88320

    python执行系统命令

    在python3中,推荐使用subprocess模块来执行系统命令,基本用法如下 # 导入模块>>> import subprocess# 执行系统命令 wc-l>>> cmd = subprocess.run...(['ls','-l'])# 运行状态,运行成功返回0>>> cmd.returncode0 上述代码中通过一个列表来记录执行的命令,软件名称,选项,参数等都对应列表中的一个元素。...另外,还支持限定执行时间,如果超时,报错,写法如下 >>> cmd = subprocess.run('ls -l', shell = True, timeout = 100) time参数的单位为秒...控制标准输入的经典使用场景是运行交互式的命令,用法如下 >>> import subprocess# stdin 控制标准输入流# stdout 控制标准输出流>>> s = subprocess.Popen...=subprocess.PIPE, shell=True)# 向标准输入流写入参数>>> s.stdin.write(b"print('hello')")14>>> s.stdin.close()# 标准输出流读出运行结果

    1.7K10

    Python 执行系统命令

    返回值是指令运行返回的状态码,0表示指令成功执行,1表示失败,256表示没有返回结果,该方法适用于系统命令不需要输出内容的场景。...a接收返回值 print(a) # 理论上command是一个字符串,实际看command还是得变为字节数组 # 当命令中存在中文时可能会报编码错误,此时可以自己给命令编一下码 # exit_code...如果env=None,默认从父进程继承环境变量 universal_newlines 不同系统的的换行符不同,当该参数设定为true时,表示使用\n作为换行符。...该函数将一直等待到子进程运行结束,并返回进程的returncode。文章一开始的例子就演示了call函数。如果子进程不需要进行交互,就可以使用该函数来创建。...如果 args是一个字符串,该字符串指定要通过shell执行的命令。

    1.7K10

    Python中os.system()、subprocess.run()、call()、check_output()的用法

    False 时)stdin, stdout, stderr: 用于指定标准IO文件句柄,可以是: subprocess.PIPE: 用作 stdout, stderr 参数的值时,可以返回值对象中的.../dev/null 用户已经打开的文件对象或描述符(整型数字)capture_output: 当设置为 True 时,相当于 stdout 和 stderr 参数都设置为 True 了,可以通过返回值对象访问标准输出和标准错误内容...抛出 CalledProcessError 异常text: 当设置为 True 时,stdin、stdout、stderr 会以“文本”模式打开(返回值对象中的 stdout、stderr 存储文本内容..., shell=False, cwd=None, timeout=None)注意:这个方法的返回值是命令的退出码,而不是一个对象,所以无法像 subprocess.run() 一样捕获命令输出内容(不要设置...,也可以将设置 stderr=subprocess.STDOUT 将标准错误重定向到标准输出,但是好像没有办法单独捕获标准错误内容呢!

    73720

    subprocess:Python中创建子进程

    系统常用的whoami命令,返回当前用户的名称,输出如下: 这里,我们使用subprocess.run调用了子进程运行windows命令。...通常情况下,退出状态码为0表示进程成功运行了;一个负值-N表示这个子进程被信号N终止了。...通过Shell返回消息 本例会通过一个子shell运行命令,在命令返回错误码并退出之前,将详细输入到控制台。...,效果如下: 这里我们输入了一个错误的命令,可以看到因为命令错误,并没有输出命令的执行结果,0和64中间就是completed.stdout,为空。...而命令将错误消息返回了。这是因为我们设置了stdout与stderr为subprocess.PIPE,表明这些通道要开放。这样我们才能获取子shell运行的结果获取所运行错误提示。

    52570

    用一个 Python 脚本实现依次运行其他多个带 argparse 命令行参数的 .py 文件

    问题分析与解决: 在 Linux 开发环境中,我们通常可以使用 Bash 脚本来依次运行其他多个带 argparse 命令行参数的 .py 文件。...当你使用 os.system 函数时,它会在系统的 shell 中执行你提供的命令,然后返回一个状态码,表示命令是否成功执行。这个状态码通常是一个整数,0 表示命令成功执行,非零值表示出现了错误。...因此,os.system 函数的设计就是这样,它只返回命令的执行状态,而不返回命令的输出。...这些函数可以执行系统命令,并捕获命令的输出,所以如果你需要获取命令的输出,你可以考虑使用这些函数。 在 Windows 系统中,我们可以使用 dir 命令来列出目录中的文件和文件夹。...例如,如果你在 Web 服务器上使用 os.system 函数,并且允许用户输入要执行的命令,那么恶意用户就可能通过构造特殊的命令来攻击你的服务器。

    10400

    python subprocess模块

    0返回0,否则抛异常 subprocess.check_call(["ls","-l"]) subprocess.check_call("exit 1",shell=True)...抛出异常:subprocess.CalledProcessError: subprocess.check_output 执行命令,如果状态码是 0返回执行结果,否则抛异常 subprocess.check_output...\n') 调用和系统之间的操作,推荐subprocess.run() ,因为它迟早要替换掉sys.system ; run()方法可以满足大部分的需求,如果要进行一些复杂的交互的话,还可以用subprocessPopen...0 无缓冲,1 行缓冲,其他 缓冲区大小,负值 系统缓冲 stdin, stdout, stderr:分别表示程序的标准输入、输出、错误句柄 preexec_fn:只在Unix平台下有效...,用于指定一个可执行对象(callable object),它将在子进程运行之前被调用 close_sfs:在windows平台下,如果close_fds被设置为True,新创建的子进程将不会继承父进程的输入

    1K20

    python移除删除非空文件夹目录的最有效方法是什么?

    如果要删除文件夹,不管它是否包含只读文件,请使用 import shutil shutil.rmtree('/folder_name', ignore_errors=True) 2.os.walk()...ignore_errors,忽略错误;否则,如果设置了onerror,调用它以使用参数(func、path、exc_info)处理错误,其中func是os.listdir、os.remove或os.rmdir...如果"忽略错误"为"假",而"OnError"为"无",则会引发异常。请在此处输入代码。...删除一个文件夹,即使它可能不存在(避免了Charles Chow的答案中的竞争条件),当其他事情出错时仍有错误(例如权限问题、磁盘读取错误、文件不是目录) 对于Python 3 .x: import..." subprocess.run(["rm","-rf", path]) 本质上,它使用python的子进程模块来运行bash脚本$ rm -rf '/path/to/your/dir,就好像使用终端来完成相同的任务一样

    17010

    Linux运维面试收藏

    $ip DOWN fi }& done wait 25、写一个脚本,判断一个指定的脚本是否是语法错误如果错误提醒用户键入Q或者q无视错误并退出其它任何键可以通过vim打开这个指定的脚本...,提示用户是否创建;如果创建就继续执行,否则,函数返回一个51的错误值给调用脚本; 3)如果给的目录存在,下载文件;下载命令执行结束后测试文件下载成功与否;如果成功,返回0给调用脚本...如果上述过程都正常,返回0给主程序; 2、调用此函数;并通过接收函数执行的返回值来判断其执行情况,并将信息显示出来; local Darray=(`ls /dev/sd[a-z...echo传递给fdisk进行分区,如果此命令失败,跳转出去,错误值68,需要注意的是,有时候这个返回值很诡异,笔者之前成功与否都是返回的1,后来重启之后,就好了,如果慎重的话,可以对创建的分区,进行判断...而rhel6.0以后,这个命令就很危险了,而使用partx -a /dev/sdb效果更好…此项需慎重,如果格式化失败,告知把失败的分区定义成变量,且跳出函数,并带出错误值69 `partprobe

    1.1K40

    【Python | 常见场景】最佳实践系列 —— 各种场景及运用(适合下饭刷)

    ♂️声明:本人目前大学就读于大二,研究兴趣方向人工智能&硬件(虽然硬件还没开始玩,一直很感兴趣!...您可以使用subprocess.run()`函数来运行命令,并等待命令执行完成。...错误处理: ``subprocess模块还提供了处理子进程中的错误和异常的功能。您可以通过检查subprocess.CompletedProcess`对象的属性来获取命令的执行结果、返回码和输出。...其他功能: ``subprocess`模块还提供了其他一些功能,如控制子进程的输入、输出和错误流、设置超时、在后台运行进程等。您可以查阅官方文档以了解更多详细信息。...使用以下命令: pip install ipykernel 或者,如果使用的是 conda,使用以下命令: conda install ipykernel 步骤 3: 添加虚拟环境内核到 Jupyter

    19510

    Python调用系统命令的六种方法

    返回值是指令运行返回的状态码,0表示指令成功执行,1表示失败,256表示没有返回结果,该方法适用于系统命令不需要输出内容的场景。...系统下运行 import os os.system('cd /home && mkdir test') 执行多条命令可以使用&&连接 os.popen(command,mode) 这种调用方式是通过管道的方式来实现...如果mode为’r’,调用该对象的read()或readlines()方法可以读取输出内容。...官方推荐使用该模块执行系统命令,subprocess模块通过子进程来执行外部指令,并通过input/output/error管道,获取子进程的执行的返回信息。...好处在于:运用对线程的控制和监控,将返回的结果赋于一变量,便于程序的处理。 subprocess.Popen() 使用Popen可以创建进程,并与进程进行复杂的交互。

    3.9K20

    干货 | 28个 Linux 运维经典面试题

    $ip DOWN fi }& done wait 25、写一个脚本,判断一个指定的脚本是否是语法错误如果错误提醒用户键入Q或者q无视错误并退出其它任何键可以通过vim打开这个指定的脚本?...的错误值给调用脚本; 3)如果给的目录存在,下载文件;下载命令执行结束后测试文件下载成功与否;如果成功,返回0给调用脚本,否则,返回52给调用脚本。...1G;如果此步骤失败,返回68给主程序; 格式化此两分区,文件系统类型为ext3;如果此步骤失败,返回69给主程序; 如果上述过程都正常,返回0给主程序; 2、调用此函数;并通过接收函数执行的返回值来判断其执行情况...echo传递给fdisk进行分区,如果此命令失败,跳转出去,错误值68,需要注意的是,有时候这个返回值很诡异,笔者之前成功与否都是返回的1,后来重启之后,就好了,如果慎重的话,可以对创建的分区,进行判断.../sdb效果更好…此项需慎重,如果格式化失败,告知把失败的分区定义成变量,且跳出函数,并带出错误值69 `partprobe` Part=`fdisk -l /dev/$Sd|tail -2|cut

    1.1K10

    Linux运维工程师:30道面试题整理

    $ip DOWN      fi    }& done wait 25.写一个脚本,判断一个指定的脚本是否是语法错误如果错误提醒用户键入 Q 或者 q 无视错误并退出其它任何键可以通过 vim...,提示用户是否创建;如果创建就继续执行,否则,函数返回一个 51 的错误值给调用脚本; 3)如果给的目录存在,下载文件;下载命令执行结束后测试文件下载成功与否;如果成功,返回 0 给调用脚本,否则...100M,一个大小为 1G;如果此步骤失败,返回 68 给主程序; 格式化此两分区,文件系统类型为 ext3;如果此步骤失败,返回 69 给主程序; 如果上述过程都正常,返回 0 给主程序; 2、调用此函数...echo 传递给 fdisk 进行分区,如果此命令失败,跳转出去,错误值 68,需要注意的是,有时候这个返回值很诡异,笔者之前成功与否都是返回的 1,后来重启之后,就好了,如果慎重的话,可以对创建的分区...以后,这个命令就很危险了,而使用 partx -a /dev/sdb 效果更好…此项需慎重,如果格式化失败,告知把失败的分区定义成变量,且跳出函数,并带出错误值 69 `partprobe` Part

    12.8K55
    领券