python子进程的输出不可见_python-输出子进程调用的命令行?

本文介绍了一种用Python编写的实用函数,用于格式化命令行并扩展环境变量,使得长命令易于阅读和复制。通过将环境变量和路径设置清晰,便于用户理解和执行复杂的Shell命令,适用于开发人员日常维护和问题排查。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

美观且可扩展的方法

我一直在使用这样的东西:

#!/usr/bin/env python3

import os

import shlex

import subprocess

import sys

def run_cmd(cmd, cwd=None, extra_env=None, extra_paths=None, dry_run=False):

if extra_env is None:

extra_env = {}

newline_separator = ' \\\n'

out = []

kwargs = {}

env = os.environ.copy()

# cwd

if 'cwd' is not None:

kwargs['cwd'] = cwd

# extra_env

env.update(extra_env)

for key in extra_env:

out.append('{}={}'.format(shlex.quote(key), shlex.quote(extra_env[key])) + newline_separator)

# extra_paths

if extra_paths is not None:

path = ':'.join(extra_paths)

if 'PATH' in env:

path += ':' + env['PATH']

env['PATH'] = path

out.append('PATH="{}:${{PATH}}"'.format(':'.join(extra_paths)) + newline_separator)

# Command itself.

for arg in cmd:

out.append(shlex.quote(arg) + newline_separator)

# Print and run.

kwargs['env'] = env

print('+ ' + ' '.join(out) + ';')

if not dry_run:

subprocess.check_call(cmd, **kwargs)

run_cmd(

sys.argv[1:],

cwd='/bin',

extra_env={'ASDF': 'QW ER'},

extra_paths=['/some/path1', '/some/path2']

)

样品运行:

./a.py echo 'a b' 'c d'

输出:

+ ASDF='QW ER' \

PATH="/some/path1:/some/path2:${PATH}" \

echo \

'a b' \

'c d' \

;

a b c d

功能摘要:

使巨大的命令行可读,每行一个选项

在sh -x之类的命令中添加cd,以便用户可以轻松区分其输出中的命令

显示cd,以及额外的环境变量(如果已将其赋予命令)。 这些仅在给定的情况下打印,从而生成最小的shell命令。

所有这些使用户可以轻松地手动复制命令,以在出现故障时运行它们,或者查看正在发生的情况。

已在Python 3.5.2,Ubuntu 16.04上测试。 GitHub上游。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值