gpt4 book ai didi

python - 在 python 中使用 WSL bash

转载 作者:可可西里 更新时间:2023-11-01 10:10:42 25 4
gpt4 key购买 nike

我正在使用 Windows 10,在处理一个新项目时,我需要从 Python(Windows Python 解释器)中与 WSL(Windows 上的 Ubuntu)bash 进行交互。

我尝试使用 subprocess python 库来执行命令..我所做的看起来像这样:

import subprocess
print(subprocess.check_call(['cmd','ubuntu1804', 'BashCmdHere(eg: ls)']))#not working

print(subprocess.check_output("ubuntu1804", shell=True).decode())#also not working

预期的行为是执行启动 wsl linux bash 的 ubuntu1804 命令,我想在其上执行我的“BashCmdHere”并将其结果检索到 python 但它只是卡住。我究竟做错了什么 ?或者如何做到这一点?

非常感谢

最佳答案

找到了 2 种方法来实现这一点:

我的代码的正确版本如下所示

#e.g: To execute "ls -l"
import subprocess
print(subprocess.check_call(['wsl', 'ls','-l','MaybeOtherParamHere']))

我应该使用 wsl 从 Windows aka bash 调用 linux shell 然后我的命令和参数在子进程命令的单独参数中。

另一种我认为更简洁但可能更繁重的方法是使用 PowerShell 脚本:

#script.ps1
param([String]$folderpath, [String]$otherparam)
Write-Output $folderpath
Write-Output $otherparam
wsl ls -l $folderpath $otherparam

然后在python中执行并得到结果:

import subprocess


def callps1():
powerShellPath = r'C:\WINDOWS\system32\WindowsPowerShell\v1.0\powershell.exe'
powerShellCmd = "./script.ps1"
#call script with argument '/mnt/c/Users/aaa/'
p = subprocess.Popen([powerShellPath, '-ExecutionPolicy', 'Unrestricted', powerShellCmd, '/mnt/c/Users/aaa/', 'SecondArgValue']
, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
output, error = p.communicate()
rc = p.returncode
print("Return code given to Python script is: " + str(rc))
print("\n\nstdout:\n\n" + str(output))
print("\n\nstderr: " + str(error))


# Test
callps1()

谢谢你的帮助

关于python - 在 python 中使用 WSL bash,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57693460/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com