怎么使用popen调用shell命令并拿到返回值
时间: 2024-02-17 08:09:56 浏览: 166
使用popen调用shell命令并拿到返回值的方法如下:
```c
#include <stdio.h>
int main(int argc, char *argv[]) {
FILE *fp;
char path[1035];
/* 执行命令 */
fp = popen("ls /etc/", "r");
if (fp == NULL) {
printf("Failed to run command\n");
return 1;
}
/* 读取命令输出 */
while (fgets(path, sizeof(path)-1, fp) != NULL) {
printf("%s", path);
}
/* 关闭文件指针 */
pclose(fp);
return 0;
}
```
以上代码中,我们首先使用popen函数执行了一个`ls /etc/`的命令,并将输出结果保存在文件指针`fp`中。之后,我们使用一个循环读取命令输出,将输出打印到终端中。最后,我们使用pclose函数关闭文件指针。
需要注意的是,popen函数执行的命令的输出结果是实时输出的,所以我们需要使用while循环持续读取输出结果。此外,popen函数执行的命令的返回值只包含命令的标准输出,如果需要获取标准错误输出,可以使用`2>&1`将标准错误输出重定向到标准输出中。
相关问题
lua调用shell命令获取返回值
你可以使用Lua的os.execute()函数来执行shell命令,并使用io.popen()函数来获取命令的返回值。例如,以下代码可以执行一个命令,并在执行结束后打印返回值:
```
command = "ls"
handle = io.popen(command)
result = handle:read("*a")
handle:close()
print(result)
```
这将执行"ls"命令,并将返回结果存储在result变量中,然后将其打印出来。你可以将command变量替换为任何你想要执行的命令。
python调用mobaxterm程序使用账号和密码登录服务器并执行命令得到返回值,不展示moba窗口
要实现这个功能,你可以使用Python的`subprocess`模块来调用MobaXterm程序,同时使用`pyautogui`模块来模拟键盘输入,从而实现自动登录和执行命令的功能,并且不展示MobaXterm窗口。具体的步骤如下:
1. 导入`subprocess`和`pyautogui`模块
```
import subprocess
import pyautogui
```
2. 构造MobaXterm的命令行参数
```
command = 'MobaXterm.exe /login:username@hostname /password:password /cmd:"your command"'
```
其中`username`是你的账号名,`hostname`是服务器地址,`password`是你的密码,`your command`是你要执行的命令。
3. 使用`subprocess.Popen()`方法调用MobaXterm程序,并将其隐藏起来
```
proc = subprocess.Popen(command, stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=subprocess.PIPE, shell=True, creationflags=subprocess.CREATE_NO_WINDOW)
```
其中`stdin=subprocess.PIPE`表示将标准输入重定向到一个管道,`stdout=subprocess.PIPE`表示将标准输出重定向到一个管道,`stderr=subprocess.PIPE`表示将标准错误重定向到一个管道,`shell=True`表示使用shell运行命令,`creationflags=subprocess.CREATE_NO_WINDOW`表示不显示MobaXterm窗口。
4. 使用`pyautogui`模块模拟键盘输入,输入账号和密码
```
# 输入账号
pyautogui.typewrite('username')
pyautogui.press('enter')
# 输入密码
pyautogui.typewrite('password')
pyautogui.press('enter')
```
5. 执行命令并得到返回值
```
# 执行命令
pyautogui.typewrite('your command')
pyautogui.press('enter')
# 得到返回值
output = proc.stdout.read()
```
其中`proc.stdout.read()`表示从标准输出管道中读取输出结果。
以上就是使用Python调用MobaXterm程序登录服务器并执行命令的方法,并且不展示MobaXterm窗口。注意,这种方法需要安装MobaXterm程序,并且需要在Windows系统上运行Python程序。
阅读全文