鱼C论坛

 找回密码
 立即注册
查看: 1881|回复: 9

[已解决]求解!os.system()

[复制链接]
发表于 2023-7-1 02:53:18 From FishC Mobile | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
# 请各位大神帮帮忙!
"""求解:os.system()会创建一个子进程并在子进程里执行os.system()里的命令,我想在同一个进程里执行两个os.system命令该怎么解决?"""

# 假如:我有个需要输入ip地址和端口号的命令和一个配对码的命令。我必须要输入ip地址和端口号的命令才会提示要输入配对码。如果我用两个os.system(),他会创建两个进程。第二个os.system()的内容就无法输入到该输入的地方了。求解决!!!

import os
import time


os.system('adb pair ip地址和端口号')
time.sleep(3)
os.system('配对码')
time.sleep(3)
os.system('adb connect ip地址和端口号')
最佳答案
2023-7-1 08:08:54
在你的情况下,建议你使用 subprocess 模块的 Popen 对象。这样你可以更好地控制你的子进程。你可以发送命令,并且从子进程读取或写入数据。这可能对你来说是最好的选择,因为你可以将第二个命令(配对码)发送到第一个进程。

以下是如何使用 subprocess 模块来做到这一点的代码:
import subprocess

# 启动第一个命令
p = subprocess.Popen(['adb', 'pair', 'ip地址和端口号'], stdin=subprocess.PIPE)

# 等待一段时间
time.sleep(3)

# 将配对码发送到进程
p.communicate(input='配对码')

# 等待进程结束
p.wait()

# 执行最后一个命令
os.system('adb connect ip地址和端口号')

这段代码中, Popen 构造函数创建一个新的进程,然后启动你的 adb pair 命令。你可以使用 Popen 对象的 communicate 方法将配对码发送到这个进程。最后,你可以使用 os.system 运行你的最后一个命令。

请注意: input 参数到 communicate 方法应该是字节类型,而不是字符串。如果你的配对码是字符串,你需要在传递给 communicate 之前将其编码为字节,像这样: '配对码'.encode() 。

另外,你可能需要自行调整这个代码以满足你的特定需求,例如错误处理和超时。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2023-7-1 07:03:16 | 显示全部楼层
您可以使用 subprocess 模块来执行多个命令并在同一个进程中进行交互。

下面是一个示例代码,其中使用了 subprocess.Popen() 函数来创建子进程,并通过 communicate() 方法在父进程和子进程之间进行通信。
import subprocess

# 执行第一个命令
process1 = subprocess.Popen(['adb', 'pair', 'ip地址和端口号'], stdin=subprocess.PIPE)
process1.communicate()  # 等待第一个命令执行完毕

# 执行第二个命令
process2 = subprocess.Popen(['配对码'], stdin=subprocess.PIPE)
process2.communicate()  # 等待第二个命令执行完毕

# 执行第三个命令
process3 = subprocess.Popen(['adb', 'connect', 'ip地址和端口号'], stdin=subprocess.PIPE)
process3.communicate()  # 等待第三个命令执行完毕

在上述代码中,首先使用 subprocess.Popen() 创建了子进程 process1,然后使用 communicate() 方法等待第一个命令执行完毕。接着执行第二个命令,再次使用 communicate() 等待第二个命令执行完毕。最后执行第三个命令,并使用 communicate() 方法等待第三个命令执行完毕。

这样,您就可以在同一个进程中执行多个命令,并确保输入的交互信息正确传递到命令行提示符。

希望这个解决方案对您有所帮助!如有任何其他问题,请随时向我提问。

评分

参与人数 1荣誉 +1 鱼币 +1 收起 理由
君无泪 + 1 + 1 鱼C有你更精彩^_^

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

发表于 2023-7-1 08:08:54 | 显示全部楼层    本楼为最佳答案   
在你的情况下,建议你使用 subprocess 模块的 Popen 对象。这样你可以更好地控制你的子进程。你可以发送命令,并且从子进程读取或写入数据。这可能对你来说是最好的选择,因为你可以将第二个命令(配对码)发送到第一个进程。

以下是如何使用 subprocess 模块来做到这一点的代码:
import subprocess

# 启动第一个命令
p = subprocess.Popen(['adb', 'pair', 'ip地址和端口号'], stdin=subprocess.PIPE)

# 等待一段时间
time.sleep(3)

# 将配对码发送到进程
p.communicate(input='配对码')

# 等待进程结束
p.wait()

# 执行最后一个命令
os.system('adb connect ip地址和端口号')

这段代码中, Popen 构造函数创建一个新的进程,然后启动你的 adb pair 命令。你可以使用 Popen 对象的 communicate 方法将配对码发送到这个进程。最后,你可以使用 os.system 运行你的最后一个命令。

请注意: input 参数到 communicate 方法应该是字节类型,而不是字符串。如果你的配对码是字符串,你需要在传递给 communicate 之前将其编码为字节,像这样: '配对码'.encode() 。

另外,你可能需要自行调整这个代码以满足你的特定需求,例如错误处理和超时。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

发表于 2023-7-1 09:31:57 | 显示全部楼层
如果你想在同一个进程里执行两个os.system命令,你有几种方法可以尝试:

你可以用分号(;)或者和号(&)来分隔你的命令,这样它们会在同一个子进程里顺序执行。
例如:
import os
os.system("adb pair ip地址和端口号; 配对码; adb connect ip地址和端口号")

你可以用subprocess模块来创建一个子进程,并用shell=True参数来允许你执行多个命令。
例如:
import subprocess
subprocess.check_call("adb pair ip地址和端口号; 配对码; adb connect ip地址和端口号", shell=True)

你可以用os.chdir函数来改变当前工作目录,然后再执行你的命令。
例如:
import os
os.system("adb pair ip地址和端口号")
os.chdir("path") # 这里填写你要切换的目录
os.system("配对码")
os.system("adb connect ip地址和端口号")

希望这对你有帮助。如果你还有其他问题,欢迎继续提问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

 楼主| 发表于 2023-7-1 11:42:29 From FishC Mobile | 显示全部楼层
Ewan-Ahiouy 发表于 2023-7-1 07:03
您可以使用 subprocess 模块来执行多个命令并在同一个进程中进行交互。

下面是一个示例代码,其中使用了 ...

谢谢。感谢大佬解惑!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-7-1 11:43:18 From FishC Mobile | 显示全部楼层
isdkz 发表于 2023-7-1 08:08
在你的情况下,建议你使用 subprocess 模块的 Popen 对象。这样你可以更好地控制你的子进程。你可以发送命 ...

感谢!感谢!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-7-1 11:43:51 From FishC Mobile | 显示全部楼层
陶远航 发表于 2023-7-1 09:31
如果你想在同一个进程里执行两个os.system命令,你有几种方法可以尝试:

你可以用分号(;)或者和号(& ...

谢谢!谢谢!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-7-1 13:04:10 | 显示全部楼层
君无泪 发表于 2023-7-1 11:42
谢谢。感谢大佬解惑!

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-7-1 15:30:12 | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-7-1 15:34:59 | 显示全部楼层

我想要c币
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-12-26 20:47

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表