几种编程语言中调用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命令有两种方法:

使用!

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

使用前缀shell

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

R中调用shell命令

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

Python中调用shell命令

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

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

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

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

评论

程振兴

程振兴 @czxa.top
截止今天,我已经在本博客上写了607.9k个字了!

Your browser is out-of-date!

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

×