标签: exec

如何从 Python exec()/eval() 调用中获取结果?

我想用 Python 编写一个工具,通过为每个模拟运行创建一个文件夹和一个包含一些特定于运行的参数的配置文件来准备模拟研究。

study/
  study.conf
  run1
    run.conf
  run2
    run.conf
Run Code Online (Sandbox Code Playgroud)

该工具应从文件中读取整体研究配置,包括 (1) 静态参数(键值对)、(2) 迭代参数列表,以及 (3) 一些小代码片段,用于根据先前的参数计算更多参数。后者的运行具体取决于所使用的迭代参数的排列。

在从模板编写 run.conf 文件之前,我需要运行一些类似这样的代码,以确定该运行的代码片段中的特定键值对

code = compile(code_str, 'foo.py', 'exec')
rv=eval(code, context, { })
Run Code Online (Sandbox Code Playgroud)

然而,正如 Python 文档所证实的那样,这只会导致Noneas 返回值。

示例中的代码字符串和上下文字典在其他地方填充。对于这个讨论,这个片段应该做到这一点:

code_str="""import math
math.sqrt(width**2 + height**2)
"""

context = {
    'width' : 30,
    'height' : 10
}
Run Code Online (Sandbox Code Playgroud)

我以前用 Perl 和 Java+JavaScript 做过这个。在那里,您只需将代码片段提供给某些评估函数或脚本引擎,然后从最后执行的语句中获取返回值(对象)——这不是一个大问题。

现在,在 Python 中,我遇到这样一个事实: eval() 太窄,只允许一个语句,而 exec() 一般不返回值。我需要导入模块,有时需要做一些稍微复杂的计算,例如5行代码。

难道我目前没有看到更好的解决方案吗?

在我的研究过程中,我发现了一些关于Pyhton eval() 和 exec()的非常好的讨论,以及一些棘手的解决方案,通过通过 stdout并解析那里的返回值来规避该问题。后者可以做到,但不是很好,而且已经有 5 岁了。

python eval exec

4
推荐指数
1
解决办法
3128
查看次数

如何在 docker 容器中运行 /bin/bash?

如何/bin/bash在以 启动的 docker 容器中运行-d option,例如:

sudo docker run -P --name test-cnt3 -d base-tst:0.1? 
Run Code Online (Sandbox Code Playgroud)

我真的需要容器中的控制台,并且我已经对运行它感到绝望

bash exec bin docker

4
推荐指数
1
解决办法
2万
查看次数

Docker exec 命令中的管道返回错误

我尝试执行的命令

docker exec apache_mp 'find / -type f -name artisan 2>&1 | grep -v "Permission denied"'
Run Code Online (Sandbox Code Playgroud)

回报

OCI 运行时执行失败:执行失败:container_linux.go:348: 启动容器进程导致“exec: \”find / -type f -name artisan 2>&1 | grep -v 权限\": stat find / -type f -name artisan 2>&1 | grep -v 权限: 没有这样的文件或目录": 未知

这很奇怪,因为当从portainer运行相同的命令时它确实有效。为什么是这样?

在此输入图像描述

exec docker

4
推荐指数
1
解决办法
3702
查看次数

Golang 获取命令 tty 输出

我使用 go 的 exec Run 命令来获取命令输出,当命令“Stdout”字段设置为os.Stdout且错误发送到os.Stderr.

\n\n

我想将输出和错误输出显示到控制台,但我也希望我的程序看到输出是什么。

\n\n

然后我创建了自己的 Writer 类型来完成此操作,将两者写入缓冲区并打印到终端。

\n\n

问题是\xe2\x80\x94,当某些应用程序检测到它没有写入 tty 时,会将其输出更改为人类难以读取的内容。因此,当我以后一种方式执行此操作时,我得到的输出会变得丑陋。(对计算机来说更干净,对人类来说更丑陋)

\n\n

我想知道 Go 中是否有某种方法可以让我运行的任何命令相信我是 tty,尽管不是 tty os.Stdout/os.Stderr。我知道可以使用scriptbash 命令来完成,但是根据 Darwin/Linux 使用不同的标志,所以我试图避免这种情况。

\n\n

提前致谢!

\n

exec go tty

4
推荐指数
1
解决办法
3778
查看次数

Docker Compose:将输出记录到文件和标准输出

我正在尝试将应用程序的输出记录到文件和标准输出中。仅将输出记录到 stdout 并仅将输出记录到文件有效,但是两者的组合无法按预期工作。

以下是 docker-compose.yml 的简化版本和启动脚本。

docker-compose.yml:

version: "3.8"

services:
    web:
        image: node:14
        command: sh "/app/scripts/init-app.sh"
        init: true
        volumes:
            - ./:/app
Run Code Online (Sandbox Code Playgroud)

初始化应用程序.sh:

#!/usr/bin/env sh

# Exit script immediately if a command exits with a non-zero status.
set -e

# Install and configure app
[...]

# Start app
exec ./app
Run Code Online (Sandbox Code Playgroud)

上面的配置有效,但仅输出到标准输出。

修改#1(初始化脚本的最后一行):

# Start app and log output to file
exec ./app >> "/app/log.txt" 2>&1
Run Code Online (Sandbox Code Playgroud)

此配置也有效,将输出记录到文件,但不记录到标准输出。

修改#2(初始化脚本的最后一行):

# Start app and log output to both a file and stdout …
Run Code Online (Sandbox Code Playgroud)

exec sh tee docker docker-compose

4
推荐指数
1
解决办法
1万
查看次数

在Java中的进程之间实现等待?

我想帮助理解并实现我的应用程序中各个进程之间的"等待进程完成",这需要以逐步的方式进行.我的java文件运行批处理文件,然后运行脚本.在结束时,我需要以连续的方式运行(通过命令行)一系列命令.我正在使用:

Runtime.getRuntime().exec("cmd /c start " + command)
Run Code Online (Sandbox Code Playgroud)

运行我的批处理文件和命令(不确定该信息是否相关).现在正在发生的事情是,我的应用程序中需要发生的第二步是在第一步(运行运行脚本的批处理文件)完成之前执行.在运行下一系列命令之前,我需要完成第一步.我真的希望我有意义!

java process exec wait

3
推荐指数
1
解决办法
2856
查看次数

如何在TCL中用exec拆分两个args中的变量?

我想在Tcl/Tk中创建一个简单的控制台

我有两个问题.首先用[glob*]更改每个*但是,当我的条目包含"ls -a"时,它不理解ls是命令和-a第一个arg.

我怎么能设法做到这一点?

谢谢

proc execute {} {
    # ajoute le contenu de .add_frame.add_entry
    set value [.add_frame.add_entry get]
    if {[string compare "$value" ""] == 1} {
    .text insert end "\n\n% $value\n"
        .text insert end [exec $value]
    .add_frame.add_entry delete 0 end
    }
}

frame .add_frame

label .add_frame.add_label -text "Nouvel élément : "
entry .add_frame.add_entry
button .add_frame.add_button -text "Executer" -command execute
button .add_frame.exit_button -text "Quitter" -command exit

bind  .add_frame.add_entry  <Return> execute
bind  .add_frame.add_entry  <KP_Enter> execute
bind  .  <Escape> exit …
Run Code Online (Sandbox Code Playgroud)

bash tcl exec

3
推荐指数
1
解决办法
668
查看次数

SQL从执行程序中选择SUM(col)?

SQL Server(2010)中是否有一种简单的方法来执行存储过程(返回表)并在一个(或几个)语句中对一列求和?

例如

SELECT SUM(column) FROM exec proc_GetSomeStuff 'param1', 'param2'
Run Code Online (Sandbox Code Playgroud)

sql sql-server select exec

3
推荐指数
1
解决办法
4670
查看次数

正确地将参数传递给Go Exec

我正在努力学习go,作为一个开始,我想尝试将一个超级简单的Web服务器放在一起来控制我的iTunes.我过去曾经osascript -e 'Tell Application "iTunes" to playpause'多次使用过这个目的,并且认为我可以简单地将呼叫告诉osascript.

注释掉"说5"命令确实有效.

package main

import "exec"
//import "os"

func main() {

    var command = "Tell Application 'iTunes' to playpause"
    //var command = "say 5"

    c := exec.Command("/usr/bin/osascript", "-e", command)
//  c.Stdin = os.Stdin
    _, err := c.CombinedOutput()
    println(err.String());


}
Run Code Online (Sandbox Code Playgroud)

我收到的回复如下 -

jessed@JesseDonat-MBP ~/Desktop/goproj » ./8.out
exit status 1
[55/1536]0x1087f000
Run Code Online (Sandbox Code Playgroud)

我不确定从哪里开始,任何方向都会非常感激.

macos exec go osx-snow-leopard

3
推荐指数
1
解决办法
3186
查看次数

使用WshShell.Exec()方法调用Powershell会挂起脚本

我试图用WshShell对象的Exec方法调用Powershell.我正在用JScript编写脚本,但我也在VBScript中重现了这个问题.以下两个简短的测试脚本都会导致WSH无限期挂起:

test.js

var shell = new ActiveXObject("WScript.Shell");
WScript.Echo(shell.exec("powershell -Command $Host.Version; Exit").StdOut.ReadAll());
Run Code Online (Sandbox Code Playgroud)

test.vbs

dim shell

set shell = CreateObject("WScript.Shell")
WScript.Echo shell.exec("powershell -Command $Host.Version; Exit").StdOut.ReadAll
Run Code Online (Sandbox Code Playgroud)

我做错了什么,或者我遇到了限制/不兼容?Run方法工作得很好,但是我需要捕获它无法做到的输出.

编辑:我忘了提到我的平台是Windows 7 Pro,64位使用PowerShell 3.我已经在Windows XP上使用PowerShell 1进行了测试.

编辑2:我已经更新了我正在运行的测试脚本以符合x0n的答案.不幸的是,我仍然遇到麻烦.这是我目前的测试:

test.js:

var shell = new ActiveXObject("WScript.Shell");
WScript.Echo(shell.exec('powershell -noninteractive -noprofile -Command "& { echo Hello_World ; Exit }"').StdOut.ReadAll());
Run Code Online (Sandbox Code Playgroud)

test.vbs:

dim shell

set shell = CreateObject("WScript.Shell")
WScript.Echo shell.exec("powershell -noninteractive -noprofile -Command ""& { echo Hello_World ; Exit }""").StdOut.ReadAll
Run Code Online (Sandbox Code Playgroud)

powershell wsh exec blocking

3
推荐指数
1
解决办法
7585
查看次数

标签 统计

exec ×10

docker ×3

bash ×2

go ×2

bin ×1

blocking ×1

docker-compose ×1

eval ×1

java ×1

macos ×1

osx-snow-leopard ×1

powershell ×1

process ×1

python ×1

select ×1

sh ×1

sql ×1

sql-server ×1

tcl ×1

tee ×1

tty ×1

wait ×1

wsh ×1