gpt4 book ai didi

python - 如何将 stdin 上的输入发送到 Makefile 中定义的 python 脚本?

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:32:29 25 4
gpt4 key购买 nike

给出这个问题的答案,Embed Python in Makefile to set make variables哪个有效!

define NEWLINE


endef

define PYTHON_SCRIPT_CODE
import sys
print("hi")
endef

SDK_PATH := $(shell echo \
'$(subst $(NEWLINE),@NEWLINE@,${PYTHON_SCRIPT_CODE})' | \
sed 's/@NEWLINE@/\n/g' | python -)

default:
@echo 'SDK Path Detected: $(SDK_PATH)'

如何将数据通过管道传输到 python std in?例如:

define PYTHON_SCRIPT_CODE
import sys
print("hi")
print(sys.stdin.read())
endef

# pseudocode
SDK_PATH := $(shell bash --version | PYTHON_SCRIPT_CODE)
default:
@echo 'SDK Path Detected: $(SDK_PATH)'

会输出:

SDK Path Detected: hi
GNU bash, version 4.4.19(1)-release (x86_64-pc-linux-gnu)
Copyright (C) 2016 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>

This is free software; you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.

目前,我正在这样做:

define NEWLINE


endef

BASH_VERSION := $(shell bash --version)
define PYTHON_SCRIPT_CODE
import sys
print("Hi")
print("${BASH_VERSION}")
endef

SDK_PATH := $(shell echo \
'$(subst $(NEWLINE),@NEWLINE@,${PYTHON_SCRIPT_CODE})' | \
sed 's/@NEWLINE@/\n/g' | python -)

default:
@echo 'SDK Path Detected: $(SDK_PATH)'

结果:(没有换行)

enter image description here


相关问题:

  1. Is it possible to create a multi-line string variable in a Makefile
  2. https://unix.stackexchange.com/questions/222911/using-embedded-python-script-in-makefile

新示例,没有将内容通过管道传输到 Python 脚本中:

#!/usr/bin/make -f
ECHOCMD:=/bin/echo -e
SHELL := /bin/bash

define NEWLINE


endef

VERSION := $(shell bash --version)

# With this, you cannot use single quotes inside your python code
define PYTHON_VERSION_CODE
import re, sys;
program_version = """${VERSION}"""
match = re.search("Copyright[^\d]+(\d+)", program_version);

if match:
if int( match.group(1) ) >= 2018:
sys.stdout.write("1")
else:
sys.stdout.write( match.group(1) )
else:
sys.stdout.write("0")
endef

# Due to this, you cannot use single quotes inside your python code
PYTHON_SCRIPT_RESULTS := $(shell echo \
'$(subst $(NEWLINE),@NEWLINE@,${PYTHON_VERSION_CODE})' | \
sed 's/@NEWLINE@/\n/g' | python -)

all:
printf 'Results: %s\n' "${PYTHON_SCRIPT_RESULTS}"

结果:

enter image description here

  1. Makefile as an executable script with shebang?

最佳答案

对我来说,绕过所有命令行引用问题的最简单方法是使用 GNUmake 的 $(file ) 函数将代码写入文件。您甚至可以在 defined 变量中使用 # 作为 Python 注释:

VERSION := $(shell bash --version)

# With this, you can use any form of quotes inside your python code
define PYTHON_VERSION_CODE :=
# -*- coding: iso-8859-15 -*-
import re, sys;
program_version = "${VERSION}"
match = re.search("Copyright[^\d]+(\d+)", program_version);

if match:
if int( match.group(1) ) >= 2018:
sys.stdout.write("1")
else:
sys.stdout.write( "match:" + match.group(1) )
else:
sys.stdout.write("0")
endef


$(file > test.py,$(PYTHON_VERSION_CODE))

PYTHON_SCRIPT_RESULTS := $(shell python test.py)

.PHONY: all
all:
@echo $(PYTHON_SCRIPT_RESULTS)

关于python - 如何将 stdin 上的输入发送到 Makefile 中定义的 python 脚本?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55681576/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com