我正在通过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编写的测试,并用正确的语法确保它们按顺序运行.
所以假设我有一个测试,如果失败,当前调用pytest.exit('Exit Message').这个问题是XML生成的测试输出只记录它之前的测试.我希望整个套件运行但如果上述测试失败则报告为失败.
我想到的解决方案是设置一个环境变量,以防它失败,然后在下面的测试中检查该环境变量.问题是用Jenkins运行它,没有检测到环境变量集,如果它存在,我更喜欢原生解决方案.
我有的是:
def test_check_connection(self):
...
if Failed:
pytest.exit('No connectivity')
Run Code Online (Sandbox Code Playgroud) 所以,假设我有列表 项 = ['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)
有关于此的任何想法?谢谢
这是一个后续问题:状态到期时触发
我在流中存储每个传入元素的状态,在计时器关闭后,我删除状态。这样我就可以防止处理重复项,直到元素超时,然后我可以再次处理相同的元素。一世
我编写了以下代码来测试计时器,但似乎在所有 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)