python子进程的输出不可见_python-输出子进程调用的命令行?
美觀且可擴展的方法
我一直在使用這樣的東西:
#!/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上游。
總結
以上是生活随笔為你收集整理的python子进程的输出不可见_python-输出子进程调用的命令行?的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: JAVA入门级教学之(方法递归习题)
- 下一篇: python中range 函数_pyth