我有一个需要执行外部程序的Python脚本,但由于某种原因失败了.
如果我有以下脚本:
import os;
os.system("C:\\Temp\\a b c\\Notepad.exe");
raw_input();
Run Code Online (Sandbox Code Playgroud)
然后它失败并出现以下错误:
'C:\ Temp\a'不被识别为内部或外部命令,可操作程序或批处理文件.
如果我用引号来逃避程序:
import os;
os.system('"C:\\Temp\\a b c\\Notepad.exe"');
raw_input();
Run Code Online (Sandbox Code Playgroud)
然后它工作.但是,如果我添加一个参数,它会再次停止工作:
import os;
os.system('"C:\\Temp\\a b c\\Notepad.exe" "C:\\test.txt"');
raw_input();
Run Code Online (Sandbox Code Playgroud)
执行程序并等待程序完成的正确方法是什么?我不需要从中读取输出,因为它是一个可视化程序,可以完成工作然后退出,但我需要等待它完成.
另请注意,将程序移动到非间隔路径也不是一种选择.
这也不起作用:
import os;
os.system("'C:\\Temp\\a b c\\Notepad.exe'");
raw_input();
Run Code Online (Sandbox Code Playgroud)
注意交换的单/双引号.
在此处有或没有记事本参数,它会失败并显示错误消息
文件名,目录名或卷标语法不正确.
我有一个批处理文件可以做很多事情,最后需要打开一个Web浏览器到页面.有没有一种办法,在本质上,呼吁ShellExecute
对HTTP打开网页?
Windows命令提示符
我需要通过shell脚本调用ant脚本.让我们考虑一下ant脚本的参数是a,b,c.我怎样才能传递这些变量的参数?我必须提供ant vis的参数来调用shell脚本.谁可以帮我这个事?
我能知道什么是各自之间的差异Exec
,ExecWait
,ExecShell
,nsExec::Exec
,nsExec::ExecToLog,
nsExec::ExecToStack
,ExecDos
和ExecCmd
,如在什么时候使用?
我已经发布了我知道的各种执行调用.我正在努力制作一份全面的清单,以便它可以帮助未来的访客.
Exec
:明确地执行被调用的字符串,无论是应用程序,控制台还是文件.
ExecWait
:执行类似Exec
但等待进程退出.
ExecShell
:它是为了什么?
nsExec::Exec
:就像Exec
或ExecWait
仅仅用于命令提示符,而且无需打开控制台窗口.我不确定它是否等待进程退出.是否nsExec::Exec
等待子进程退出?
nsExec::ExecToLog
:The documentation says ExecToLog
类似于plain nsExec
但它输出到日志窗口.这是什么意思,什么是日志窗口?
nsExec::ExecToStack
:文档说明ExecToStack
类似于plain,nsExec
但它将输出推送到堆栈.我明白了.
ExecDos
:与nsExec::ExecToStack
它相同(不是吗?)
一个.获取用作运行应用程序的stdin的字符串参数.
湾 在同步/异步模式下工作.
C.它的部分工作 - 用于.onInit检查.
ExecCmd
:相同ExecDos
但不需要这些
ExpandEnvStrings $3 %COMSPEC%
ExecDos::exec /C
Run Code Online (Sandbox Code Playgroud)
部分.我对么?
我正在寻找.NET首选的方式来执行ShellExecute在Win32中所做的相同类型的事情(打开,打印等任意文件类型).
我已经编程Windows超过20年了,但我是.NET的新手,所以也许我只是在寻找错误的地方.我目前正在使用.NET 2.0(VS C#2005),但如果需要可以使用VS 2008.
如果唯一的答案是使用P/Invoke,那么我最好还是使用Win32编写我的小实用程序.
我有一个文件是一个bash脚本,需要SUDO才能工作.
我可以使用SUDO从命令行运行它但我会被提示输入SUDO密码.
我想从php运行这个脚本,shell_exec
但如果我调用SUDO,它不像命令行,我可以提示输入密码.有没有办法通过sudo调用传递sudo的密码?
我怎样才能做到这一点?
我想在Go中执行shell命令,并在程序中将结果输出作为字符串.我看到了Rosetta Code版本:
package main
import "fmt"
import "exec"
func main() {
cmd, err := exec.Run("/bin/ls", []string{"/bin/ls"}, []string{}, "", exec.DevNull, exec.PassThrough, exec.PassThrough)
if (err != nil) {
fmt.Println(err)
return
}
cmd.Close()
Run Code Online (Sandbox Code Playgroud)
但这并没有以我可以以编程方式访问的方式捕获实际标准或错误 - 那些仍然打印到常规stdout/stderr.我看到使用Pipe作为out或err可以帮助其他地方,但没有如何这样做的例子.有任何想法吗?
我有一个重命名的js文件,我必须在我的每个PHP页面调用.现在我想使用shell替换旧名称.我用的是这个: -
sed -i ’s/old/new/g’ *
Run Code Online (Sandbox Code Playgroud)
但这会产生以下错误: -
sed: -e expression #1, char 1: unknown command:
Run Code Online (Sandbox Code Playgroud)
现在我该如何替换?
我有一个在delphi中编码的命令行应用程序,我需要从普通的桌面应用程序(也用delphi编写)调用.简而言之,我想调用命令行应用程序并在列表框中显示它"实时"输出的文本.
自从我使用shell以来已经很久了,但我清楚地记得,为了从命令行应用程序中获取文本 - 我必须使用管道符号">".像这样:
C:/mycmdapp.exe> c:/result.txt
这将打印到shell的任何文本(使用writeLn)并将其转储到名为"result.txt"的文本文件中.
但是......(这里有泡菜),我想要一个实时结果而不是一个积压文件.一个典型的例子是Delphi编译器本身 - 它设法向IDE报告发生了什么.如果我的记忆正确地为我服务,我似乎记得我必须创建一个"管道"通道(?),然后将管道名称分配给shell调用.
我试图谷歌这个但我老实说不确定如何制定它.希望社区中的某些人能指出我正确的方向.
更新:此问题可能与如何在Delphi中运行命令行程序相同?.虽然标题和问题本身并不相同,但有些答案符合我的要求.
是否可以从Lua中的局部变量中读取以下内容?
local t = os.execute("echo 'test'")
print(t)
Run Code Online (Sandbox Code Playgroud)
我只是想实现这一点:无论通过什么执行ox.execute
并将返回任何值,我想在Lua中使用它 - 例如echo 'test'
将test
在bash命令行中输出- 是否可以获得返回值(test
在这种情况下)到Lua局部变量?