在Vim中,读取shell命令输出的最佳(可移植和快速)方法是什么?此输出可能是二进制的,因此包含空值,并且(不)具有重要的尾随换行符.我看到当前的解决方案
system().问题:不适用于NULL.:read !.问题:不会保存尾随换行符,试图智能检测输出格式(dos/unix/mac).!重定向到临时文件,然后readfile(, "b")读取它.问题:对fs的两个调用,shellredir选项也默认重定向stderr并且它应该不那么可移植('shellredir'这里提到因为它可能被设置为有效值).system()和过滤输出xxd.问题:非常慢,最不便携(没有相当于'shellredir'管道).还有其他想法吗?
我有一个C++应用程序,我正在从Win32移植到OSX.我希望能够像用户打开它一样启动任意文件.使用ShellExecute在Windows上很容易.我如何在Mac上完成同样的事情?
谢谢!
我正在使用我编写的包装器类运行第三方脚本,该类调用shell_exec()和管道到我稍后使用PHP代码解析的文件中.我应该提到这是有效的,但是我正在尝试增强功能,遇到了一个我没想过的用例.
如何在shell_exec()上管理超时?我想把它包装成一个,try() catch()但我不知道如何最好地处理时间组件.
我一直在阅读这里有关的几个问题shell_exec(),exec()并且似乎通过将输出参数传递给exec()你可以得到一个返回,但这确实依赖于脚本以返回状态结束.再加上我的迷你测试页面,我似乎无法让它返回任何输出!
我想到的另一个选项是使用模态对话框,使用ajax样式微调器,同时使用它运行的脚本,并在javascript中设置手动超时.然后,它给用户一个关于它失败/超时和结束的模型对话框消息.
这个用例有没有可接受的方法?
我的迷你测试包括以下内容,
public $e_return = array();
public $e_status = '';
// Paths are absolute from /
public function execCheck($domain){
exec($this->ssl_check_path." -s ".$domain." -p 443 > ".$this->folder.$this->filename." 2>&1 &", &$this->e_return, &$this->e_status);
}
// Returns
Array
(
)
0
Run Code Online (Sandbox Code Playgroud)
使用此问题作为ref, 无法使用PHP exec执行PHP脚本
我的应用程序的一些用户报告链接不在浏览器中打开.我总是用shellexecute启动它们(0,'打开','http:// ......
我可以检查http链接关联中的错误(?)设置?
我有一个希望很快的问题:是否有可能延迟执行ShellExecute一点?
我有一个autoupdater应用程序.在下载所有必需的文件等之后,它会将当前文件重命名为*.OLD,将新文件重命名为之前的文件.很简单.但后来我需要删除那些.OLD文件.这个'清理'程序在MainForm.OnActivate上执行(检查它是否是第一个激活proc).但这显然发生得太快(我从DeleteFile得到False).这是程序:
procedure TUpdateForm.OKBtnClick(Sender: TObject);
const SHELL = 'ping 127.0.0.1 -n 2';
begin
ShellExecute(0,'open',pchar(SHELL+#13+Application.ExeName),nil,nil,SW_SHOWNORMAL);
Application.Terminate;
end;
Run Code Online (Sandbox Code Playgroud)
此过程应该重新启动应用程序.我确定删除问题是由第二个应用程序的快速启动引起的,因为如果我自己重新启动它,给它一点时间,文件会被正常删除.
tl; dr版本:我需要调用ShellExecute()等待(0.1秒左右)然后THEN执行命令.
注意
我尝试使用-ping命令尝试延迟它,但它没有用.
非常感谢你提前
编辑:改述
我需要这个发生|| 第一个应用关闭; 等待100毫秒; 第二个应用程序打开 ||.我需要先调用ShellExecute,然后等待调用应用程序完全关闭,然后执行shell(即打开第二个应用程序)
在Windows 8 RTM(Chrome,Firefox)中设置非默认浏览器,并尝试运行如下代码:
ShellExecute(NULL, "open", "http://stackoverflow.com", NULL, NULL, SW_SHOWNORMAL);
没关系.但是然后将清单更改为需要管理权限或只是"以管理员身份运行".
代码不起作用.
好的,然后尝试使用"以管理员身份运行"运行任何应用程序.
你会看到相同的结果,链接不起作用.
将默认浏览器更改回IE - >一切正常.
在Windows 8以前的版本中,没有这样的行为.
到底是怎么回事?
PS.看来微软在他们自己的软件中遇到了同样的问题:) Windows 8 RTM上的Visual Studio 2012 Web发布无法启动浏览器
我需要通过c#传递多个命令行参数,用于名为handle.exe的进程:http://www.google.com.mt/search? sourceid = chrome&ie = UTF-8&q = handlele.exe
首先,我需要通过ADMINISTRATOR权限运行可执行文件.这篇文章帮助我实现了这一点:以 编程方式在cmista中运行cmd.exe作为管理员,c#
但接下来是调用实际行参数的下一个问题,例如"-p explore"
如何一起指定命令行参数,或者可以连续指定?
目前的代码如下:
Process p = new Process();
ProcessStartInfo processStartInfo = new ProcessStartInfo("filePath");
processStartInfo.CreateNoWindow = true;
processStartInfo.UseShellExecute = false;
processStartInfo.RedirectStandardOutput = true;
processStartInfo.RedirectStandardInput = true;
processStartInfo.Verb = "runas";
processStartInfo.Arguments = "/env /user:" + "Administrator" + " cmd";
p.StartInfo = processStartInfo;
p.Start();
string output = p.StandardOutput.ReadToEnd();
p.WaitForExit();
Console.WriteLine(output);
Run Code Online (Sandbox Code Playgroud)
谢谢
我如何通过php执行这两个命令行:
wkhtmltopdf www.google.com gg.pdf
&
oofice -headless -nologo -pt cup-pdf my.doc
他们都返回一个pdf文件并下载到我的主目录.
我想知道通过php从我的html页面执行这些命令的方法.
谢谢.
我想调用更新程序来检查更新(不是实际进行更新,而只检查是否有更新).我想在后台默默地做这件事.如果有更新,我会要求用户提升权限并运行更新程序.检查涉及读取应用程序目录中的文件,并将其中找到的版本与网站上的版本进行比较.
如何在没有高程的情况下运行它只进行检查?QProcess::start()失败,因为它需要提升权限,ShellExecute只有在我添加"runas"动词时才会出现相同的原因(我只想在那个目录中实际写入,即我想要执行更新).我猜我需要添加某种清单,但我不知道它的内容.
在我的应用程序中,我希望能够使用与不同扩展名相关联的程序执行具有任意名称和扩展名的文件.
例如,假设我有一个名为的文件file.dat,但我想用记事本打开它,就像它被命名file.txt或file.dat.txt.此外,我没有权限重命名该文件,所以这是不可能的.
如果文件被称为file.txt,我可以调用ShellExecute的.但是在打电话时失败了file.dat; Windows抱怨该文件没有关联.
我不想对特定的可执行文件进行硬编码,因为(在上面的示例中)最终用户可以.txt使用Wordpad而不是记事本来关联文件.在这种情况下,我希望file.dat用Wordpad打开我.