基于@Flyingmana的回答,我做了一些挖掘并提出了解决方案。它适合我。
首先是我的解决方案,然后是一些解释。
我已经在test.phpmagento实例的根目录中创建了一个名为的文件。  
<?php
require __DIR__ . '/app/bootstrap.php';
$bootstrap = \Magento\Framework\App\Bootstrap::create(BP, $_SERVER);
/** @var \Magento\Framework\App\Http $app */
$app = $bootstrap->createApplication('TestApp');
$bootstrap->run($app);
然后,我在TestApp.php与此内容相同的位置创建了一个文件。
<?php
class TestApp
    extends \Magento\Framework\App\Http
    implements \Magento\Framework\AppInterface {
    public function launch()
    {
        //dirty code goes here. 
        //the example below just prints a class name
        echo get_class($this->_objectManager->create('\Magento\Catalog\Model\Category'));
        //the method must end with this line
        return $this->_response;
    }
    public function catchException(\Magento\Framework\App\Bootstrap $bootstrap, \Exception $exception)
    {
        return false;
    }
}
现在,我可以test.php在浏览器中调用,TestApp :: launch()中放置的所有内容都将被执行。  
现在,这为什么起作用:bootstrap类中
的方法createApplication是最重要的部分。它创建一个应用程序类的实例。该方法createApplication期望\Magento\Framework\AppInterface包含2个方法的实现。
因此,我在TestApp实现该接口的过程中创建了自己的类。我总是使方法catchException返回,false因为我不希望我的应用处理异常。万一有问题,只需在屏幕上打印即可。
然后我实现了该方法launch。这个被称为\Magento\Framework\App\Bootstrap::run。run无论作为参数传递的应用程序是什么,此方法几乎都可以执行相同的操作。
唯一依赖于应用程序的是此行:  
$response = $application->launch();
这意味着调用\Magento\Framework\App\Bootstrap::run将初始化Magento env(也许做一些其他疯狂的事情……我还没有检查所有事情),然后launch从应用程序中调用该方法。
这就是为什么您需要将所有脏代码放入该方法的原因。
然后\Magento\Framework\App\Bootstrap::run调用$response->sendResponse();其中$response有什么launch方法返回。
这就是为什么return $this->_response;需要。它只是返回一个空响应。  
我使我的应用程序类扩展了,\Magento\Framework\App\Http因此我已经有了请求和响应参数(以及其他参数),但是您可以使您的类什么都不扩展。然后,您需要从\Magento\Framework\App\Http类中复制构造函数。如果需要,可以在构造函数中添加更多参数。