小编Asa*_*lik的帖子

将子进程输出显示到stdout并重定向它

我正在通过Python的子进程模块运行脚本.目前我使用:

p = subprocess.Popen('/path/to/script', stdout=subprocess.PIPE, stderr=subprocess.PIPE)
result = p.communicate()
Run Code Online (Sandbox Code Playgroud)

然后我将结果打印到stdout.这很好,但由于脚本需要很长时间才能完成,我还希望从脚本到stdout的实时输出.我输出输出的原因是因为我想解析它.

python subprocess stdout

12
推荐指数
1
解决办法
9912
查看次数

如果特定的测试失败,则无法进行pytest测试

所以我有一个目录,里面填充了一堆用python编写的测试,并用正确的语法确保它们按顺序运行.

所以假设我有一个测试,如果失败,当前调用pytest.exit('Exit Message').这个问题是XML生成的测试输出只记录它之前的测试.我希望整个套件运行但如果上述测试失败则报告为失败.

我想到的解决方案是设置一个环境变量,以防它失败,然后在下面的测试中检查该环境变量.问题是用Jenkins运行它,没有检测到环境变量集,如果它存在,我更喜欢原生解决方案.

我有的是:

def test_check_connection(self):
    ...
    if Failed:
        pytest.exit('No connectivity')
Run Code Online (Sandbox Code Playgroud)

python pytest jenkins

5
推荐指数
1
解决办法
1567
查看次数

使用python中的列表推导扩展列表

所以,假设我有列表 = ['abc','def','tre'].

现在我想在每个列表项之前插入一个标志.

例如,新列表items2应该是['-g','abc',' - g','def',' - g','tre'].

我可以读取列表并在附加标志后附加每个列表,但我想以python的方式开始.

我想出的是:

items2.extend(['-g', i] for i in items )
Run Code Online (Sandbox Code Playgroud)

这给了我一个包含较小列表的列表:

items2 = [['-g', 'abc'], ['-g', 'def'], ['-g', 'tre']]
Run Code Online (Sandbox Code Playgroud)

我明白这是因为它等同于说

items2.extend([ ... ] , [ ... ], [ ... ])
Run Code Online (Sandbox Code Playgroud)

有关于此的任何想法?谢谢

python list-comprehension

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

Flink计时器未按时执行

这是一个后续问题:状态到期时触发

我在流中存储每个传入元素的状态,在计时器关闭后,我删除状态。这样我就可以防止处理重复项,直到元素超时,然后我可以再次处理相同的元素。一世

我编写了以下代码来测试计时器,但似乎在所有 3 个元素都通过第一个ProcessFunction.

public static void main(String[] args) throws Exception {
    StreamExecutionEnvironment streamEnv = StreamExecutionEnvironment.getExecutionEnvironment();
    streamEnv.setStreamTimeCharacteristic(TimeCharacteristic.IngestionTime);
    streamEnv.setParallelism(12);

    List<Tuple2<String, String>> inputList = new ArrayList<>();
    inputList.add(new Tuple2<>("Test", "test"));
    inputList.add(new Tuple2<>("Test", "test"));
    inputList.add(new Tuple2<>("Test", "test"));

    streamEnv.fromCollection(inputList).keyBy(0)
            .process(new ProcessFunction<Tuple2<String, String>, Tuple2<String, String>>() {
                ValueState<Integer> occur;

                @Override
                public void open(Configuration parameters) throws Exception {
                    occur = getRuntimeContext().getState(new ValueStateDescriptor<Integer>("occurs", Integer.class, 0));
                }

                @Override
                public void processElement(Tuple2<String, String> value, Context ctx, Collector<Tuple2<String, String>> out) throws Exception {
                    if (occur.value() < 2) { …
Run Code Online (Sandbox Code Playgroud)

java apache-flink flink-streaming

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