unix 如何在WSL Ubuntu 20.04环境中从Windows中的Python脚本启动命令

w41d8nur  于 2022-12-26  发布在  Unix
关注(0)|答案(2)|浏览(232)

为了在Python中自动化工作流,我需要运行一些Cshell脚本。我希望能够在Windows中从Python脚本本身调用这些脚本。下面是我需要在Ubuntu 20.04 WSL环境中执行的两个命令:

command1 = "cd /mnt/Projecten/Bodemdaling/Working_directories/Hawaii/asc/data"
command2 = "organize_files_tops_linux.csh SAFE_filelist ../reframed/pins.ll 1 &> oft_mode1.log &"

第一个命令导航到POSIX路径,第二个命令从该路径运行Cshell脚本。
我正在努力寻找一种方法来实现这一点。我尝试了下面的代码:

import os
os.system('wsl ~ -e sh -c "cd ../../mnt/d/Projecten/Bodemdaling/Working_directories/Hawaii/asc/data; organize_files_tops_linux.csh SAFE_filelist ../reframed/pins.ll 1 &> oft_mode1.log &"')

这还没有给予我任何结果。执行此任务的有效方法是什么?

ufj5ltwl

ufj5ltwl1#

如果我理解正确的话,您可能希望从WSL环境中运行一系列命令,以导航到Windows系统中的某个目录,然后在那里执行Cshell脚本。
要在shell中运行命令,您可以查看python's built-in subprocess module。运行命令有许多选项,但需要注意的是,每个进程都独立运行,因此将两个命令与不同的进程链接是行不通的。
您可以尝试在bash中使用&&操作符,使用本地默认shell在一个进程中将命令链接在一起。我没有您的文件可用,所以我尝试了以下测试,请随意替换您自己的命令:

import subprocess

command1 = "cd /mnt/d"
command2 = "ls"

subprocess.run(f"{command1} && {command2}", shell=True, check=True)
pieyvz9o

pieyvz9o2#

在Ubuntu会话中使用WSL时,mnt将位于根目录/下,因此您为WSL指定的路径至少应以cd /mnt/d/...开头
但是,如果您的两个命令可以在C-Shell中运行,为什么不创建一个C-Shell脚本来包含它们,然后将该脚本作为WSL启动调用的一部分启动呢?
如果您试图在WSL环境中从Windows调用某些东西,请尽可能使调用变得简单,即使这意味着要在WSLUbuntu环境中创建一个辅助脚本。

相关问题