subprocess 模块及 bash -c command

>>> import subprocess
>>> out = subprocess.check_output(['ls', '-l'])
>>> out
b'\xe6\x80\xbb\xe7\x94\xa8\xe9\x87\x8f 36\n-rw-rw-r-- 1 root root 3713 Mar 15 09:54 dataloader.py\n-rw-rw-r-- 1 root root 7253 Mar 15 09:54 main.py\n-rw-rw-r-- 1 root root 3099 Mar 15 09:54 model.py\n-rw-rw-r-- 1 root root  753 Mar 15 09:54 preprocess.py\n-rw-rw-r-- 1 root root 1055 Mar 15 09:54 README.md\n-rw-rw-r-- 1 root root  106 Mar 15 09:54 requirements.txt\n-rw-rw-r-- 1 root root 2115 Mar 15 09:54 util.py\n-rw-rw-r-- 1 root root 3084 Mar 15 09:54 vocab.py\n'

这段代码执行一个指定的命令并将执行结果以一个字节字符串的形式返回。 如果你需要文本形式返回,加一个解码步骤即可。例如:

>>> out_text = out.decode('utf-8')
>>> out_text
'总用量 36\n-rw-rw-r-- 1 root root 3713 Mar 15 09:54 dataloader.py\n-rw-rw-r-- 1 root root 7253 Mar 15 09:54 main.py\n-rw-rw-r-- 1 root root 3099 Mar 15 09:54 model.py\n-rw-rw-r-- 1 root root  753 Mar 15 09:54 preprocess.py\n-rw-rw-r-- 1 root root 1055 Mar 15 09:54 README.md\n-rw-rw-r-- 1 root root  106 Mar 15 09:54 requirements.txt\n-rw-rw-r-- 1 root root 2115 Mar 15 09:54 util.py\n-rw-rw-r-- 1 root root 3084 Mar 15 09:54 vocab.py\n'

虽然转换为了文本形式,但是仍然是长长的一串,阅读体验不佳

>>> out_texts = out_text.split('\n')
>>> for x in out_texts:
...		print(x)
...
总用量 36
-rw-rw-r-- 1 root root 3713 Mar 15 09:54 dataloader.py
-rw-rw-r-- 1 root root 7253 Mar 15 09:54 main.py
-rw-rw-r-- 1 root root 3099 Mar 15 09:54 model.py
-rw-rw-r-- 1 root root  753 Mar 15 09:54 preprocess.py
-rw-rw-r-- 1 root root 1055 Mar 15 09:54 README.md
-rw-rw-r-- 1 root root  106 Mar 15 09:54 requirements.txt
-rw-rw-r-- 1 root root 2115 Mar 15 09:54 util.py
-rw-rw-r-- 1 root root 3084 Mar 15 09:54 vocab.py

和命令行直接输入 ls -l 得到的结果是一样的
也等同于,subprocesscall方法, 不过不知道为什么最后一个0

>>> import subprocess
>>> subprocess.call(['bash','-c','ls -l'])
总用量 36
-rw-rw-r-- 1 root root 3713 Mar 15 09:54 dataloader.py
-rw-rw-r-- 1 root root 7253 Mar 15 09:54 main.py
-rw-rw-r-- 1 root root 3099 Mar 15 09:54 model.py
-rw-rw-r-- 1 root root  753 Mar 15 09:54 preprocess.py
-rw-rw-r-- 1 root root 1055 Mar 15 09:54 README.md
-rw-rw-r-- 1 root root  106 Mar 15 09:54 requirements.txt
-rw-rw-r-- 1 root root 2115 Mar 15 09:54 util.py
-rw-rw-r-- 1 root root 3084 Mar 15 09:54 vocab.py
0

指定bash -c是因为linux中可能有很多shell
bash -c 是为了保证命令使用 bash shell 来执行。如果你使用的默认 shell 就是bash那么就没有区别。

# 查看支持的 shell
$ cat /etc/shells 
# /etc/shells: valid login shells
/bin/sh
/bin/dash
/bin/bash
/bin/rbash
/usr/bin/screen
# 查看正在使用的 shell
$ echo $SHELL
/bin/bash

参考:

13.6 执行外部命令并获取它的输出
bash -c “command” 与command有何区别?
Pytorch-RNN-text-classification

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值