我正在尝试创建一个类似于shell的环境,其中向用户显示">>>"并且可以键入任意多个预定义的命令.但是,我能想到实现这一点的唯一方法是使用字典映射命令 - > code和python的"exec".
有没有更正确的方法呢?
我可以传回执行脚本的输出,但如果脚本错误输出我没有输出错误.
// This is a file that doesn't exists, for testing
$command = './path/to/non/existing/script.sh';
$commandOutput = exec($command, $commandOutput); // works but no error output
//passthru($command, $commandOutput); // works but error output was 127 not file not found
//$commandOutput = escapeshellcmd($command);
echo "The Output:\n|".$commandOutput."|\n";
var_dump($commandOutput);
The Output:
||
Run Code Online (Sandbox Code Playgroud)
我想输出错误信息:
The Output:
|file not found|
Run Code Online (Sandbox Code Playgroud)
如何或者什么功能/参数会这样做?
注意:我正在SQL Server 2008 R2下运行...
我花了一些时间阅读本网站以及其他网站上数十篇有关如何执行动态SQL(查询超过4000个字符)的文章。我已经尝试了十多种建议的解决方案。共识似乎是将查询分为4000个字符的变量,然后执行以下操作:
EXEC (@SQLQuery1 + @SQLQuery2)
Run Code Online (Sandbox Code Playgroud)
这对我不起作用-查询在@ SQLQuery1的末尾被截断。
现在,我已经看到了人们如何通过使用REPLICATE一堆空格等来“强制”长查询的示例,但这是一个真正的查询-但是比这复杂得多。
我有名称为“ Company_A_ItemView”的SQL视图。
我有10家公司想要创建相同的确切视图,并使用不同的名称,例如“ Company_B_ItemView”,“ Company_C_ItemView” .. etc。
如果您提供帮助,请不要问为什么会有多个视图-只需接受我需要这样做即可,好吗?
每个公司都有自己的一组表,并且CREATE VIEW语句按名称引用了几个表。这是Brief示例,但请记住,查询的总长度约为6000个字符:
CREATE view [dbo].[Company_A_ItemView] as
select
WE.[Item No_],
WE.[Location Code],
LOC.[Bin Number],
[..more fields, etc.]
from
[Company_A_Warehouse_Entry] WE
left join
[Company_A_Location] LOC
Run Code Online (Sandbox Code Playgroud)
...你明白了
所以,我目前正在做的是:
一种。将CREATE VIEW语句的内容拉入2个声明的变量中,例如
Set @SQLQuery1 = (select text
from syscomments
where ID = 1382894081 and colid = 1)
Set @SQLQuery2 = (select
from syscomments
where ID = 1382894081 and colid = 2)
Run Code Online (Sandbox Code Playgroud)
请注意,这就是SQL存储长定义的方式-创建视图时,它将文本存储到多个syscomments记录中。在我的情况下,视图被拆分为第一个系统记录记录中的3591个字符的文本块,其余文本在第二个记录中。我不知道为什么SQL在syscomment字段中不使用所有4000个字符。一句话就打断了这个陈述。
请注意,在我所有的示例中,所有@SQLQueryxxx变量都声明为varchar(max)。我也尝试过将它们声明为nvarchar(max)和varchar(8000)以及nvarchar(8000),结果相同。
b。然后,对“ Company_A”执行“搜索并替换”,然后将其替换为“ …
我正在尝试通过管道"my_pipe"将stdin从父级重定向到子级,但是当我运行程序时,我看不到预期的结果.
当我执行程序时,它期望从stdin输入,那么为什么它没有重定向在dup2中的stdin?
#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include <unistd.h>
#include <string.h>
int main(int argc, char* argv[])
{
char* arguments[] = {"sort", NULL};
int my_pipe[2];
if(pipe(my_pipe) == -1)
{
fprintf(stderr, "Error creating pipe\n");
}
pid_t child_id;
child_id = fork();
if(child_id == -1)
{
fprintf(stderr, "Fork error\n");
}
if(child_id == 0) // child process
{
close(my_pipe[1]); // child doesn't write
dup2(0, my_pipe[0]); // redirect stdin
execvp(argv[0], arguments);
fprintf(stderr, "Exec failed\n");
}
else
{
close(my_pipe[0]); // parent doesn't read
char reading_buf[1];
write(my_pipe[1], …Run Code Online (Sandbox Code Playgroud) 所以我试图制作一个通用的应用程序,我试图让它具有打开应用程序的能力.所以,我想要让它打开一个应用程序,如果它是一个单词,但有空格,它永远不会工作.我是这样做的:
if(textField.getText().startsWith("application open")){
try {
String string1 = textField.getText().substring(17, textField.getText().length());
Runtime.getRuntime().exec("open /Applications/\"" + string1 + "\".app");
textArea.append("Opening application " + string1 + "..." + newline);
} catch (IOException ioe) {
ioe.printStackTrace();
}
}
Run Code Online (Sandbox Code Playgroud)
如果有人能帮助我,那就太好了!霍华德史塔克,提前谢谢
我有以下调用exec在后台运行脚本test.php.
exec("/home/gooffers/test.php?one=one &");
Run Code Online (Sandbox Code Playgroud)
脚本test.php包含以下内容
$test = $_GET['one'];
echo $test;
Run Code Online (Sandbox Code Playgroud)
然而,这会造成无限循环(无限数量的进程),从而导致服务器崩溃.为什么会这样呢?
我正在做这个小程序,在调用程序时读取用户参数.像ls,rm等简单的调用很容易做到,我无法弄清楚该怎么做是这样的:
cat file1 >> file2我想要做的是将一个文件的内容添加到另一个文件,而不是替换内容.
所以如果我这样做:./ programName add file1 file2
if(strcmp(argv[1], "add")==0){
char *parmList[] ={ "cat", argv[2], ">>", argv[3], NULL};
execv("/bin/cat", parmList);
exit(EXIT_SUCCESS);
}
Run Code Online (Sandbox Code Playgroud)
返回是控制台上打印的两个文件
cat:>>:没有这样的文件或目录
我究竟做错了什么?没有猫,有没有其他方法可以做到这一点?ps:必须与exec(3).
编辑:对于任何感兴趣的人,回复帮助我找到了一种方法,尽管我不确定是否有更好的方法来做到这一点.我做的是转换
"cat",argv [2],">>",argv [3]
到一个字符串然后按照建议使用/ bin/sh -c.
这是代码
char parmList[180];
strcpy (parmList,"cat ");
strcat (parmList,argv[2]);
strcat (parmList," >> ");
strcat (parmList,argv[3]);
char *args[] = { "/bin/sh", "-c", parmList, NULL };
execve("/bin/sh", args, NULL);
Run Code Online (Sandbox Code Playgroud) 我exec和evalTcl 有点困惑.在以下示例中:
set cmd "mkdir new_folder";
exec $cmd
Run Code Online (Sandbox Code Playgroud)
不能与错误消息一起使用:couldn't execute "mkdir new_folder" no such file or directory.
并且eval有效
set cmd "mkdir new_folder";
eval exec $cmd
Run Code Online (Sandbox Code Playgroud)
我也尝试过这种方式:
set cmd_1 "mkdir";
set cmd_2 "new_folder"
exec $cmd_1 $cmd_2
Run Code Online (Sandbox Code Playgroud)
它也很好用.那是什么原因?
我尝试:
def test(w,sli):
s = "'{0}'{1}".format(w,sli)
exec(s)
return s
print test("TEST12344","[:2]")
Run Code Online (Sandbox Code Playgroud)
其返回值“ TEST12344” [:2]
如何从函数中的exec返回值
我想使用golang和exec库转到某个路径“ c:\”并运行一个.exe文件。
当我运行go代码时,它会给我:
exec:“ cd:/”:文件不存在