我有一个 C# 命令行应用程序,我需要在 Windows 和 Unix 的单声道下运行。在某些时候,我想在给定一组通过命令行传入的任意参数的情况下启动一个子进程。例如:
Usage: mycommandline [-args] -- [arbitrary program]
不幸的是,System.Diagnostics.ProcessStartInfo 只接受一个字符串作为参数。这是命令的问题,例如:
./my_commandline myarg1 myarg2 -- grep "a b c" foo.txt
在这种情况下 argv 看起来像:
argv = {"my_commandline", "myarg1", "myarg2", "--", "grep", "a b c", "foo.txt"}
请注意,“a b c”周围的引号已被 shell 剥离,因此如果我简单地连接参数以便为 ProcessStartInfo 创建 arg 字符串,我将得到:
args = "my_commandline myarg1 myarg2 -- grep a b c foo.txt"
这不是我想要的。
有没有一种简单的方法可以将 argv 传递给 C# 下的子进程启动,或者将任意 argv 转换为对 windows 和 linux shell 合法的字符串?
如有任何帮助,我们将不胜感激。
最佳答案
MSDN 有一个描述 how the MS Visual C Runtime parses the string由 GetCommandLine()
返回放入 argv
数组。
您可能还对 list2cmdline()
感兴趣来自 Python 标准库的函数,Python 的 subprocess
模块使用它来模拟 Win32 环境中的 Unix argv
行为。
关于c# - 如何使用 argv 在 C# 中启动子进程? (或将 agrv 转换为合法的 arg 字符串),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2960103/