几种编程语言中调用 shell 命令方法汇总

几种编程语言中调用 shell 命令方法汇总

在此之前只是到 Stata 中调用 shell 命令的方法,所以一旦遇到需要 curl 等 shell 命令的地方就不得不使用 Stata 来处理,虽然很喜欢 Stata,但是 Stata 最让人难受的地方就是当字符串过长的时候无法读入内存中,因此对 json 等格式的文件处理效果很糟糕。今天随手搜索来一下其它几种语言中调用 shell 命令的方法,试了好几种搜索姿势。最后发现,这样搜索才能搜索到:C++中调用shell, Python中调用shell···

下面将依次介绍 shell 命令如何在不同种语言种进行调用。我就用最常用的从浏览器复制得到的 curl 请求为例来说明。curl www.baidu.com -o temp.txt

Stata 调用 shell 命令

Stata 调用 shell 命令有两种方法:

使用

Stata
1
!curl www.baidu.com -o temp.txt

使用前缀 shell

Stata
1
shell curl www.baidu.com -o temp.txt

R 中调用 shell 命令

R
1
system("curl www.baidu.com -o temp.txt")

Python 中调用 shell 命令

方法 1: os 包中的 system()函数

Python
1
2
import os
os.system("curl www.baidu.com -o temp.txt")

方法 2: os 包中的 popen()函数

Python
1
2
3
4
import os
os.popen("curl www.baidu.com -o temp.txt")
# 显示当前文件夹中的文件
os.popen("ls").readlines()

其他方法参考这两篇博客

Python 调用 shell 命令之三慷慨法
python 中执行 shell 命令

C++中调用 shell 命令

c,c++中调用 shell 脚本并保存 shell 的执行结果
C/C++中 system()函数详解
这里经过我的多次尝试,似乎需要指定-o ~/Desktop/temp.txt才会把结果存储在 temp.txt 里。

1
2
3
4
5
6
7
8
#include <stdlib.h>
#include <stdio.h>
int main(void)
{
system("curl www.baidu.com -o ~/Desktop/temp.txt");
system("curl wttr.in");
return 0;
}

运行结果:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
% Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
Dload Upload Total Spent Left Speed
100 2381 100 2381 0 0 85035 0 --:--:-- --:--:-- --:--:-- 85035
Weather report: Oymyakon, Russia

_`/"".-. Thundery outbreaks possible
,\_( ). 17 °C
/(___(__) ↗ 12 km/h
⚡‘‘⚡‘‘ 15 km
‘ ‘ ‘ ‘ 0.2 mm
┌─────────────┐
┌──────────────────────────────┬───────────────────────┤ Sun 17 Jun ├───────────────────────┬──────────────────────────────┐
│ Morning │ Noon └──────┬──────┘ Evening │ Night │
├──────────────────────────────┼──────────────────────────────┼──────────────────────────────┼──────────────────────────────┤
│ .-. Light drizzle │ _`/"".-. Patchy rain po…│ _`/"".-. Thundery outbr…│ \ / Partly cloudy │
│ ( ). 10-12 °C │ ,\_( ). 13-14 °C │ ,\_( ). 17 °C │ _ /"".-. 14 °C │
│ (___(__) ↖ 13-15 km/h │ /(___(__) ↖ 12-14 km/h │ /(___(__) ↗ 12-14 km/h │ \_( ). ↗ 11-18 km/h │
│ ‘ ‘ ‘ ‘ 7 km │ ‘ ‘ ‘ ‘ 7 km │ ⚡‘‘⚡‘‘ 15 km │ /(___(__) 16 km │
│ ‘ ‘ ‘ ‘ 0.1 mm | 25% │ ‘ ‘ ‘ ‘ 0.2 mm | 72% │ ‘ ‘ ‘ ‘ 0.2 mm | 45% │ 0.0 mm | 0% │
└──────────────────────────────┴──────────────────────────────┴──────────────────────────────┴──────────────────────────────┘
┌─────────────┐
┌──────────────────────────────┬───────────────────────┤ Mon 18 Jun ├───────────────────────┬──────────────────────────────┐
│ Morning │ Noon └──────┬──────┘ Evening │ Night │
├──────────────────────────────┼──────────────────────────────┼──────────────────────────────┼──────────────────────────────┤
│ \ / Partly cloudy │ Overcast │ \ / Partly cloudy │ \ / Partly cloudy │
│ _ /"".-. 11-13 °C │ .--. 17 °C │ _ /"".-. 20 °C │ _ /"".-. 19 °C │
│ \_( ). ↖ 15-18 km/h │ .-( ). ↖ 16-18 km/h │ \_( ). ↖ 9-11 km/h │ \_( ). ↖ 8-13 km/h │
│ /(___(__) 19 km │ (___.__)__) 20 km │ /(___(__) 19 km │ /(___(__) 19 km │
0.0 mm | 0% │ 0.0 mm | 0% │ 0.0 mm | 0% │ 0.0 mm | 0% │
└──────────────────────────────┴──────────────────────────────┴──────────────────────────────┴──────────────────────────────┘
┌─────────────┐
┌──────────────────────────────┬───────────────────────┤ Tue 19 Jun ├───────────────────────┬──────────────────────────────┐
│ Morning │ Noon └──────┬──────┘ Evening │ Night │
├──────────────────────────────┼──────────────────────────────┼──────────────────────────────┼──────────────────────────────┤
│ \ / Partly cloudy │ \ / Partly cloudy │ \ / Partly cloudy │ \ / Partly cloudy │
│ _ /"".-. 15 °C │ _ /"".-. 19 °C │ _ /"".-. 21 °C │ _ /"".-. 20 °C │
│ \_( ). ↖ 6-8 km/h │ \_( ). ↖ 6-7 km/h │ \_( ). ← 5-6 km/h │ \_( ). ← 11-18 km/h │
│ /(___(__) 20 km │ /(___(__) 19 km │ /(___(__) 19 km │ /(___(__) 19 km │
0.0 mm | 0% │ 0.0 mm | 0% │ 0.0 mm | 0% │ 0.0 mm | 0% │
└──────────────────────────────┴──────────────────────────────┴──────────────────────────────┴──────────────────────────────┘

We were unable to find your location
so we have brought you to Oymyakon,
one of the coldest permanently inhabited locales on the planet.

New feature: multilingual location names wttr.in/станция+Восток (in UTF-8) and location search wttr.in/~Kilimanjaro (just add ~ before)
Follow @igor_chubin for wttr.in updates

Process finished with exit code 0

或许以后使用 Stata 的次数会因此减少了!

# C++, Python, R, Stata

Comments

Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×