VS代码 - 使用代码运行器扩展在虚拟机(VM)上运行程序

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了VS代码 - 使用代码运行器扩展在虚拟机(VM)上运行程序相关的知识,希望对你有一定的参考价值。

我使用Linux VM通过Vagrant和Virtual Box在Windows上开发。我正在试图找出如何获得Code Runner扩展来在VM上运行我的文件。到目前为止,最大的障碍是,对于给定的文件,我需要从Windows主机路径转换为Linux来宾路径。


背景:

Code Runner扩展允许将文件类型映射到shell命令以运行这些文件。例如,

"java": "cd $dir && javac $fileName && java $fileNameWithoutExt"

告诉Code Runner,当我尝试运行Java文件时,它应该cd到包含该文件的目录,然后编译该文件,然后运行编译后的文件。从文件类型到命令的映射称为code-runner.executorMap,它包含在settings.json中。通过添加选项

"code-runner.runInTerminal": true

对于我的settings.json,我可以告诉Code Runner在集成终端中运行。因此,只需通过vagrant ssh从集成终端SSH连接到我的VM,我就有了针对虚拟机的代码运行器。

这就是问题所在 - Code Runner使用我的Windows样式路径和我的Windows文件结构作为我的VM的命令行参数。

例如,假设我的Windows文件结构看起来像c:acd,我的VM的根目录在c中,因此cd是共享文件夹。如果我想在d中运行文件,命令cd $dir将告诉我的VM执行cd c:acd

我想到了一些变通方法,比如在我的设置中添加以下内容来运行python文件

"python": "cd "$(dirname "$(locate -l1 $fileName)")"; python3 $fileName",

此命令在集成终端(VM)上运行,定位并更改为包含要运行的文件的目录。然后它告诉python3解释器运行该文件。但是,这并不总是有效(例如,多个具有相同名称的文件),并且要求我每次添加文件时都更新locate所依赖的数据库。

必须有一些方法将我的Windows文件路径转换为虚拟机上的路径(例如c:acd - > /c/d)。也许是通过Vagrant?我将不胜感激任何帮助。

答案

我开发了一种解决方法。我仍然会对“更清洁”的解决方案感兴趣。


解决方法如下:

首先,我编写了一个Python脚本,用于将Windows路径转换为虚拟机上的路径。该脚本将文件的Windows路径和文件名作为参数。

#pathconverter.py
import sys
windows_path=sys.argv[1]
file_name=sys.argv[2]

path_to_vagrantfile = r"C:UsersEvanGoogle DriveDevelopmentVagrantfile"
slashes=path_to_vagrantfile.count("\")

y=windows_path.split("\")[slashes:]
linux_path="/vagrant/"+'/'.join(y) + "/" + file_name
print(linux_path)

因此,以下代码从Windows文件位置转换为我的虚拟机上的一个位置(假设您在共享目录的根目录中保存了pathconverter.py,vagrant

python3 "/vagrant/pathconverter.py" $dirWithoutTrailingSlash $fileName

因此,为了运行各种解释语言的大多数文件,我只提供此命令的输出作为解释器的参数。例如,要在我的VM上自动运行Python脚本,我只需将以下行添加到code-runner.executorMap:

"python": "python3 "$(python3 "/vagrant/pathconverter.py" $dirWithoutTrailingSlash $fileName)""

或者对于Racket / scheme,我只是这样做:

"scheme": "racket "$(python3 "/vagrant/pathconverter.py" $dirWithoutTrailingSlash $fileName)""

以上是关于VS代码 - 使用代码运行器扩展在虚拟机(VM)上运行程序的主要内容,如果未能解决你的问题,请参考以下文章

GitHub 自托管运行器可以访问单独虚拟网络后面的 Azure 资源

VM10 win7 虚拟机+VS各种版本的快照...

Github Action 是不是支持按需自托管运行器?

如何扩展ESXi虚拟机磁盘容量

如何在 Gitlab CI shell 运行器上构建失败

虚拟机镜像Ubuntu 20.04 基础运维系列