首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在系统上的执行结束后执行所需的调用?

如何在系统上的执行结束后执行所需的调用?
EN

Stack Overflow用户
提问于 2022-07-04 05:51:30
回答 1查看 44关注 0票数 0

下面的代码应该安装colorize,使用它,然后卸载包:

代码语言:javascript
复制
#!/usr/bin/env racket
#lang racket

(system "raco pkg install colorize")

(require colorize)
(display (colorize "Italic" 'default #:style 'italic))
(newline)

(system "raco pkg remove colorize")

它不起作用--尽管require在调用system Racket之前试图在执行(system "raco pkg install colorize")之前执行(require colorize)

在Python中,我用try解决了类似的问题,例如:

代码语言:javascript
复制
from subprocess import run
from sys import modules

try:
    from bs4 import BeautifulSoup
except:
    run("pip3 install beautifulsoup4", shell=True)
    from bs4 import BeautifulSoup

#The rest of the code that does scraping.

在Bash中,我会使用if&&。如何在Racket中解决这个问题,以便自动地安装依赖项。

我知道,从安全的角度来看,我想要达到的目标可能不是好的实践,但让它超出问题的范围。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-07-04 09:41:50

我认为做这样的事是不可能的。考虑如何编译这样的程序,例如:您需要的模块在编译时根本不可用。

解决这个问题的正确方法是为这样的事情编写包装器,以确保正确的包被安装。

然而,这种可怕的虐待--差不多有一半的效果。但是不要用这个:写一个包装:它没有那么难。

代码语言:javascript
复制
#!/usr/bin/env racket
#lang racket

;;; DO NOT USE THIS. May explode on contact.  Harmful to fish.
;;; 
(begin-for-syntax
  (require pkg pkg/lib)
  (when (not (member "colorize" (installed-pkg-names)))
    (pkg-install-command "colorize" #:auto #t)))

(require colorize)
...
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72852262

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档