我的用户登录后,我需要手动输入以下内容,因此我试图创建一个脚本来为我做
. oraenv
该应用要求我输入,所以我输入“ M40”(每次输入相同的文本)
然后我必须运行linux应用程序以启动我的工作环境。
所以我如何自动输入M40,然后按Enter键
答案 0 :(得分:3)
from requests import get
from requests.exceptions import RequestException
from contextlib import closing
from bs4 import BeautifulSoup
def simple_get(url):
"""
Attempts to get the content at `url` by making an HTTP GET request.
If the content-type of response is some kind of HTML/XML, return the
text content, otherwise return None.
"""
try:
with closing(get(url, stream=True)) as resp:
if is_good_response(resp):
return resp.content
else:
return None
except RequestException as e:
log_error('Error during requests to {0} : {1}'.format(url, str(e)))
return None
def is_good_response(resp):
"""
Returns True if the response seems to be HTML, False otherwise.
"""
content_type = resp.headers['Content-Type'].lower()
return (resp.status_code == 200
and content_type is not None
and content_type.find('html') > -1)
def log_error(e):
"""
It is always a good idea to log errors.
This function just prints them, but you can
make it do anything.
"""
print(e)
脚本提示输入oraenv
的值,因此您可以将自己设置为ORACLE_SID
或其他地方。
.profile
它还有一个标志,可以将其设置为非交互式:
export ORACLE_SID=M40
特别是关于管道输入,必须编写脚本来处理它,例如使用ORAENV_ASK=NO
或诸如read
之类的命令而没有文件名。有关更多详细信息,请参见Pipe input into a script。但是,这不是标准cat
的编码方式(假设这是您正在使用的脚本)。
答案 1 :(得分:0)
我不确定这些操作是否能为您提供帮助。
echo M40 | . oraenv
此人使用echo
管道。
printf M40 | . oraenv
此人将printf
用于管道。在某些情况下,使用echo
与printf
不同,但是我不知道它们的实际区别。
. oraenv <<< M40
此人使用Here String(很抱歉,使用ABS作为参考),是Heredoc的简化形式。
. oraenv < <(echo M40)
此人使用Process Substitution,您可能会看到https://superuser.com/questions/1059781/what-exactly-is-in-bash-and-in-zsh区别于上一个。
expect -c "spawn . oraenv; expect \"nput\"; send \"M40\r\n\"; interact"
此人使用expect
进行自动输入,在许多情况下具有更大的可扩展性。请注意,请根据您的实际情况更改expect \"nput\"
部分。