try{
Process process;
process = Runtime.getRuntime().exec(command);
BufferedReader in = new BufferedReader(new
InputStreamReader(process.getInputStream()));
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
Run Code Online (Sandbox Code Playgroud) 我正在尝试让脚本启动另一个脚本并将其数据放入会话变量中以供另一个脚本使用。问题是当第二个脚本 data.php 运行时,它似乎无法访问会话变量。它们是空白的,没有任何内容写入 data.txt。如果我自己运行 data.php,它会写入$_SESSION["data"]正确设置的最后一个值,但不会在它与 exec 一起运行时写入。我不确定问题是什么。有任何想法吗?
输入.php:
session_start();
$_SESSION["data"] = "Data!";
exec("/usr/bin/php /path/to/data.php > /dev/null 2>&1 &");
Run Code Online (Sandbox Code Playgroud)
数据.php:
session_start();
$fp = fopen('data.txt', 'w');
fwrite($fp, $_SESSION["data"]);
fclose($fp);
Run Code Online (Sandbox Code Playgroud)
编辑:我试图从 input.php 内部启动 data.php 并在 data.php 中访问 input.php 中的变量。
我正在尝试将字典子类化以用于 exec 方法。最终,我希望本地函数具有自定义名称范围行为。
在下面的代码中,函数b()实际上有正确的globals()字典可用,但是在解析z.
函数b()先不搜索locals()然后globals()呢?
非常令人费解。任何帮助表示赞赏。
t = '''
def b():
# return (globals()['z']) #works
return z #fails
b()
'''
class MyDict(dict):
def __init__(self, g):
dict.__init__(self)
self.my_g = g
def __getitem__(self, key):
print("GET ", key)
try:
val = dict.__getitem__(self, key)
except:
print("GET exception1")
val = self.my_g[key]
return val
g = {'z':123}
md = MyDict(g)
#fails to find z
exec(t, md, md)
#works
#exec(t, g, g)
Run Code Online (Sandbox Code Playgroud)
GET b …Run Code Online (Sandbox Code Playgroud) //code for foo (run executable as ./a.out)
#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>
#include <unistd.h>
#include <sys/wait.h>
int main (int argc, char **argv) {
pid_t pid;
pid = fork();
int i = 1;
char *parms[] = {"test2", "5", NULL}; //test executable named test2
if(pid < 0) {
fprintf(stderr, "Fork failed");
return 1;
}
else if(pid == 0) {
printf("Child pid is %d\n", pid);
i = execv("test2", parms); //exec call to test with a param of 5
}
else {
wait(NULL); …Run Code Online (Sandbox Code Playgroud) #include <errno.h>
#include <stdio.h>
#include <stdlib.h>
#include <sys/wait.h>
#include <unistd.h>
int main(void)
{
pid_t Checksum_pid = fork();
if (Checksum_pid < 0)
printf("Fork Failed\n");
else if (Checksum_pid == 0)
{
printf("\nInside Child Process before execl");
//execl("/bin/sleep", "/bin/sleep", "2", NULL);
execl("/bin/ls","ls",(char *)NULL) ;
//exit(EXIT_FAILURE);
printf("\nInside Child Process after execl\n");
exit(EXIT_FAILURE);
}
else
{
int childStatus;
printf("\nInside Parent Process");
sleep(5);
pid_t returnValue = waitpid(Checksum_pid, &childStatus, WNOHANG);
if (returnValue > 0)
{
if (WIFEXITED(childStatus))
printf("\nChild Exit Code: %d\n", WEXITSTATUS(childStatus));
else
printf("\nChild Exit Status: 0x%.4X\n", …Run Code Online (Sandbox Code Playgroud) Terms:
talib: Technical Analysis Library (stock market indicators, charts etc)
CDL: Candle or Candlestick
Run Code Online (Sandbox Code Playgroud)
简短版本:我想根据字符串 'some_function' 运行 my_lib.some_function()
在 quantopian.com 上,为了简洁起见,我想在循环中调用所有以 CDL 开头的 60 个 talib 函数,例如 talib.CDL2CROWS()。首先将函数名称作为字符串提取,然后通过与字符串匹配的名称运行函数。
这些 CDL 函数都采用相同的输入,即一段时间内的开盘价、最高价、最低价和收盘价列表,这里的测试仅使用长度为 1 的列表来简化。
import talib, re
import numpy as np
# Make a list of talib's function names that start with 'CDL'
cdls = re.findall('(CDL\w*)', ' '.join(dir(talib)))
# cdls[:3], the first three like ['CDL2CROWS', 'CDL3BLACKCROWS', 'CDL3INSIDE']
for cdl in cdls:
codeobj = compile(cdl + '(np.array([3]),np.array([4]),np.array([5]),np.array([6]))', 'talib', 'exec')
exec(codeobj)
break
# …Run Code Online (Sandbox Code Playgroud) 使用exec命令运行程序有什么区别?
例如,如果我制作了如下的脚本文件.
#script1
python test.py
#script2
exec python test.py
Run Code Online (Sandbox Code Playgroud)
两者似乎都返回相同的结果.
它们是等价的吗?
我对在 linux 中使用这些不同类型的系统调用非常陌生,这让我感到很困惑。有了这个,我只是要求朝着正确的方向推动/开始,而不是要求完成。使用fork, exec, 和wait,我已经阅读了它们,但在我的情况下仍然没有真正帮助我。我必须做的是以下,
打印提示并等待用户输入最多包含四个参数或选项的命令。“退出”将停止程序。
一些示例 ,mkdir blah创建目录,然后提示输入新命令touch blah/this blah/that blah/there。
我必须调用fork创建一个子进程来执行输入的命令,然后调用exec子进程使子进程成为要执行的程序(这部分更让我困惑),最后调用wait父进程所以解释器在命令完成之前不会打印下一个提示。
实现这一目标的最佳方法是什么?比如,读入命令/参数/选项然后执行它们的最佳方法是什么?我会假设它会更好做,这是一个do..while与while条件是什么检查“退出”
我做的很少,不多,我知道。
int main() {
char command[25];
pid_t pid;
int rs;
cout << "Enter command: ";
cin >> command;
while(strcmp(command, "exit") != 0) {
pid = fork();
if (pid == 0) { //child process
rs = execl("echo", command);
} else { // parent process
cout << "Enter a …Run Code Online (Sandbox Code Playgroud) 如何在字符串执行中使用输出参数?考虑使用“标准”语法进行以下查询:
DECLARE @testString nvarchar(50);
EXEC testProcedure @param1 = @testString OUTPUT
SELECT 'result ' = @testString
go
Run Code Online (Sandbox Code Playgroud)
如何使用字符串exec重新创建完全相同的结果,既不
EXEC ( 'testProcedure @param1 = @testString OUTPUT' )
Run Code Online (Sandbox Code Playgroud)
也不
EXEC ( 'testProcedure @param1 = ' + @testString + ' OUTPUT' )
Run Code Online (Sandbox Code Playgroud)
似乎有效:结果是NULL或Must declare the scalar variable "@testString"错误。
我想创建一个带有动态参数的存储过程。这些参数之一是表类型
CREATE TYPE [dbo].[IdTable] AS TABLE ([Id] [int] NULL)
GO
CREATE PROCEDURE [dbo].[SP_deleteCells]
@table IdTable READONLY,
@tableName NVARCHAR(50),
@fieldName NVARCHAR(50),
@result BIT OUTPUT
AS
DECLARE @SQL NVARCHAR(500);
SET @SQL='delete from TBL_CustomerTerminal where ID in (select ID from @table)'
EXEC (@SQL);
SET @result = @@ROWCOUNT;
Run Code Online (Sandbox Code Playgroud)
如何在没有错误的情况下执行此代码?现在,我得到:
必须声明表变量“@table”